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排列都向等,所以,在前文的基础上加上一个过滤的交换条件就行

原文地址:https://www.cnblogs.com/hansongjiang/p/3823009.html