全排列 java实现
本博 转载自 https://blog.csdn.net/u013309870/article/details/68941284
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
例如:
1 、2 、3三个元素的全排列为:
{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}。
1 public class HelloWorld { 2 public static void main(String []args) { 3 Permutation(new char[]{'1','2','3'},0); 4 } 5 6 7 public static void Permutation(char chs[],int start ) 8 { 9 if(start==chs.length-1) 10 { 11 System.out.println(chs); 12 //如果已经到了数组的最后一个元素,前面的元素已经排好,输出。Arrays.toString(chs); 13 } 14 for(int i=start;i<=chs.length-1;i++) 15 { 16 //把第一个元素分别与后面的元素进行交换,递归的调用其子数组进行排序 17 Swap(chs,i,start); 18 Permutation(chs,start+1); 19 Swap(chs,i,start); 20 //子数组排序返回后要将第一个元素交换回来。 21 //如果不交换回来会出错,比如说第一次1、2交换,第一个位置为2,子数组排序返回后如果不将1、2 22 //交换回来第二次交换的时候就会将2、3交换,因此必须将1、2交换使1还是在第一个位置 23 } 24 } 25 26 27 public static void Swap(char chs[],int i,int j) 28 { 29 char temp; 30 temp=chs[i]; 31 chs[i]=chs[j]; 32 chs[j]=temp; 33 } 34 }
运行结果
123
132
213
231
321
312
2. ch[] = {'1','2','1'}的情况
加一个判断解决 交换的两个字符值相等 ,跳过
posted on 2019-03-02 09:21 wait_for_you 阅读(826) 评论(0) 编辑 收藏 举报