1.无重复排列

2.有重复排列

3,下一个排列

  1. package 生成排列;
  2.  
  3. public class Main {
  4. static int count=0;
  5. //a中保存原来的排列,lev表示选定第几个数,len是长度
  6. public static void swap(int a[],int lev,int i)
  7. {
  8. int temp=a[lev];
  9. a[lev]=a[i];
  10. a[i]=temp;
  11.  
  12. }
  13. public static void swap(char a[],int lev,int i)
  14. {
  15. char temp=a[lev];
  16. a[lev]=a[i];
  17. a[i]=temp;
  18.  
  19. }
  20.  
  21. public static void reverse(char c[],int low,int high)
  22. {
  23. int l=low;
  24. int h=high;
  25. while(l<h)
  26. {
  27. swap(c,l,high);
  28. l++;
  29. h--;
  30.  
  31. }
  32.  
  33. }
  34. //利用交换法,获得排列
  35. public static void perm(int a[],int lev,int len)
  36. {
  37. if(lev==len)
  38. {
  39. for(int i=0;i<len;i++)
  40. {
  41. System.out.print(a[i]);
  42.  
  43. }
  44.  
  45. count++;
  46. }
  47. else
  48. {
  49. for(int i=lev;i<len;i++)
  50. {
  51. swap(a,lev,i);
  52. perm(a,lev+1,len);
  53. swap(a,lev,i);
  54.  
  55. }
  56.  
  57. }
  58.  
  59. }
  60. //带有重复数字的排列
  61.  
  62. public static void perm2(int a[],int lev)
  63. {
  64. if(lev==a.length)
  65. {
  66. for(int i=0;i<a.length;i++)
  67. {
  68. System.out.print(a[i]);
  69.  
  70. }
  71. System.out.println();
  72. count++;
  73. }
  74. else
  75. {
  76. boolean tf=true;
  77. for(int j=lev;j<a.length;j++)
  78. {
  79. //对于重复的数据不再交换
  80. for(int k=lev;k<j;k++)
  81. {
  82. if(a[k]==a[j])
  83. {
  84. tf=false;
  85. break;
  86. }
  87. }
  88.  
  89. if(tf)
  90. {
  91. swap(a,lev,j);
  92. perm2(a, lev+1);
  93. swap(a,lev,j);
  94. }
  95.  
  96. }
  97.  
  98. }
  99.  
  100. }
  101.  
  102. //下一个排列 STl
  103. public static boolean nextPerm(char c[]) //输入原始序列
  104. {
  105.  
  106. //找到替换点
  107. int i=c.length -2;
  108. while(i>=0&&c[i]>=c[i+1])
  109. {
  110. i--;
  111. }
  112. if(i<0) //说明是最后一个数,翻转后
  113. {
  114. reverse(c,0,c.length-1);
  115. return false;
  116.  
  117. }
  118. else
  119. {
  120. //否则的话,找到替换点
  121. //从右边开始找到第一个大于c[i]的位置
  122. int j=c.length-1;
  123. while(c[j]<=c[i])
  124. {
  125. j--;
  126.  
  127. }
  128. //交换两个值
  129. swap(c,i,j);
  130.  
  131. reverse(c,i+1,c.length -1);
  132. return true;
  133.  
  134. }
  135.  
  136. }
  137. public static void main(String[] args) {
  138. // TODO Auto-generated method stub
  139. int a[]={1,1,1,1,1};
  140. perm2(a,0);
  141. System.out.println(count);
  142. char c[]="1234".toCharArray();
  143. int count=1;
  144. /* while(nextPerm(c))
  145. {
  146.  
  147. System.out.println(c);
  148. count++;
  149. }
  150. System.out.println(count);*/
  151.  
  152. }
  153.  
  154. }

排列的学习(java)的更多相关文章

  1. 程序员带你学习安卓开发,十天快速入-对比C#学习java语法

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  2. 如何才能够系统地学习Java并发技术?

    微信公众号[Java技术江湖]一位阿里Java工程师的技术小站 Java并发编程一直是Java程序员必须懂但又是很难懂的技术内容. 这里不仅仅是指使用简单的多线程编程,或者使用juc的某个类.当然这些 ...

  3. 零基础如何学习java更有效呢?

    零基础学java,不知道该如何入手?也不知道学习的方向,很多人会问零基础怎么样学习,有没有什么入门的书籍推荐:只要方法正确,零基础学好java也是有机会的哦. 一.理解Java思想 Java是一门面向 ...

  4. 积极主动敲代码,使用Junit学习Java程序设计

    积极主动敲代码,使用JUnit学习Java 早起看到周筠老师在知乎的回答软件专业成绩很好但是实际能力很差怎么办?,很有感触. 从读大学算起,我敲过不下100本程序设计图书的代码,我的学习经验带来我的程 ...

  5. 如何接触学习java

    信息科技必将是未来的潮流,Java语言必将在时代的进步中发挥不可估量的作用,未来,掌握好一门实用而且有良好应用前景的技术是你们的首要任务. 零基础怎么学Java 多年Java教育培训经验事实表明,零基 ...

  6. 零基础如何系统学习Java Web

    零基础如何系统学习Java Web?   我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...

  7. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  8. 《疯狂Java讲义》(一) ---- 关于学习Java的反思

    "听到Spring很火,就立马买来一本Spring的书来读,最后结果往往是失败,因为这种学习没有积累,没有根基,学习过程中困难重重,每天都被一些相同.类似的问题所困扰,起初热情十足,经常上论 ...

  9. 十天来学习java的心得体会

    有关学习java是几天来的心得体会: 十天学习java遇到很多问题,每个问题都是经过反复的看书本以及上网查找资料来解决的,发现这一点真的需要自己来而不是去遇到什么问题就去依靠他人(师兄.同学).在其中 ...

  10. 【转】学习JAVA的步骤

      好东西大家分享: JAVA学习的一些重点 . Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的 ...

随机推荐

  1. Redhat 6.5 x64 下载地址

    http://ftp.okhysing.is/ftp/redhat/6.5/isos/x86_64/

  2. js中的referrer返回上一页使用介绍

    js中的referrer的用法举例. js完整代码:  <script language="javascript">  var refer=document.refer ...

  3. eclipse import的项目报autowired cannot be resolved to a type的错误

    eclipse报autowired cannot be resolved to a type的错误,一般情况是依赖的JDK或者jar包有问题,检查build path可以排查文件,我今天遇到这个情况, ...

  4. PHPCMS如何实现后台访问限制?

    修改phpcms 后台管理路径,可以有效的防止因为程序漏洞,或者是服务器安全问题所带来的 phpcms系统管理权限被黑客获取 文件路径:/caches/config/system.php 修改:'ad ...

  5. JDK和Jython安装

    下载JAVA SE,下载地址请到oracle官方网站下载. JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...

  6. hdu 5510 Bazinga KMP+尺取法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:至多50组数据,每组数据至多500个字符串,每个字符串的长度最长为2000.问最大的下标( ...

  7. Codeforces 616E - Sum of Remainders

    616E Sum of Remainders Calculate the value of the sum: n mod 1 + n mod 2 + n mod 3 + - + n mod m. As ...

  8. jexus 启动失败 原因定位

    现象: root@test:/usr/jexus/siteconf# /usr/jexus/jws restartRestarting ... Failure 定位步骤: 1.查看/usr/jexus ...

  9. splay学习笔记

    伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.(来自百科) 伸展树的操作主要是 –rotate(x) 将x旋转到x的父亲的位置 voi ...

  10. <二> SQL 基础

    left (outer) join 结果集包含连接表的匹配行,也包括左连接表的所有行. select a.a, a.b, a.c, b.c b.d b.f from a left out join b ...