全排列 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'}的情况

加一个判断解决      交换的两个字符值相等 ,跳过

猜你喜欢

转载自www.cnblogs.com/kwaitfort/p/10459724.html
今日推荐