链接: https://oj.leetcode.com/problems/permutations/
每次从num中选择一个数添加到结果中,并用used标记用过的数.
public class Solution { private boolean used[]; private List<List<Integer> > ans; private List<Integer> tans ; public List<List<Integer> > permute(int[] num) { used=new boolean[num.length]; ans=new ArrayList<List<Integer>>(); tans=new ArrayList<Integer>() ; for(int i=0;i<used.length;i++) used[i]=false; my_next_permute(0,num.length,num); return ans; } public void my_next_permute(int pos,int n,int[] num) { if(pos==n) { ans.add(new ArrayList<Integer>(tans)); return ; } for(int i=0;i<n;i++) { if(!used[i]) { tans.add(new Integer(num[i])); used[i]=true; my_next_permute(pos+1,n,num); tans.remove(tans.size()-1); used[i]=false; } } return; } };
C++的STL中有next_permutation()函数,可以求出下一个全排列
class Solution { public: vector<vector<int> > permute(vector<int> &num) { vector<vector<int> > ans; sort(num.begin(),num.end()); ans.push_back(num); while(next_permutation(num.begin(),num.end())) { ans.push_back(num); } return ans; } };