leecode 排列的学习

前面写过3个排列。这里再写一次。

1.全部都不重复https://oj.leetcode.com/problems/permutations/

(使用交换法)只是本人对c++ stl不熟,不会把排列结果保存,这里用java写一遍。

 1 public class Solution {

 2     public List<List<Integer>> permute(int[] num) {

 3         

 4        

 5        ArrayList<ArrayList<Integer>> total=new    ArrayList<ArrayList<Integer>>();

 6      

 7         if(num.length==0) return (List)total;

 8        int lev=0;

 9        per(total,num,lev);

10         return  (List)total;

11         

12     }

13     public void swap(int num[],int i,int j)

14     {

15         int temp=num[i];

16         num[i]=num[j];

17         num[j]=temp;

18         

19     }

20     

21     public void per(ArrayList<ArrayList<Integer>> total,int num[],int lev)

22     {

23         if(lev==num.length)

24         {

25             ArrayList ar=new ArrayList<Integer>();

26             for(int i=0;i<num.length;i++)

27             {

28                 ar.add(num[i]);

29             }

30             total.add(ar);

31 

32         }

33         else

34         {

35             for(int i=lev;i<num.length;i++)

36             {

37                 swap(num,lev,i);

38                

39                 per(total,num,lev+1);

40                 swap(num,lev,i);

41                 

42                 

43             }

44             

45             

46         }

47         

48         

49     }

50 }

2.

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example,
[1,1,2] have the following unique permutations:
[1,1,2], [1,2,1], and [2,1,1].

思路就是 假设当前考虑的是第一位的2 ,只有第一个1需要交换,因为 1 21 和1 12 对于,21和12排列都向等,所以,在前文的基础上加上一个过滤的交换条件就行

 

 

 

你可能感兴趣的:(code)