public class Solution {
public ArrayList<ArrayList<Integer>> permute(int[] num) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> a = new ArrayList<Integer>();
if(num==null||num.length==0) return null;
a.add(num[0]);
result.add(a);
for(int i=1;i<num.length;i++){
result = insertPerm(result,num[i]);
}
return result;
}
// 置位法插入,把每个数字间隔作为可以插入的位点
private ArrayList<ArrayList<Integer>> insertPerm(ArrayList<ArrayList<Integer>> n,int val){
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
for(int i=0;i<n.size();i++){
for(int j=0;j<n.get(i).size()+1;j++){
ArrayList<Integer> tmp = new ArrayList<Integer>(n.get(i));
tmp.add(j,val);
list.add(tmp);
}
}
return list;
}
public ArrayList<ArrayList<Integer>> permute(int[] num) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> a = new ArrayList<Integer>();
if(num==null||num.length==0) return null;
a.add(num[0]);
result.add(a);
for(int i=1;i<num.length;i++){
result = insertPerm(result,num[i]);
}
return result;
}
// 置位法插入,把每个数字间隔作为可以插入的位点
private ArrayList<ArrayList<Integer>> insertPerm(ArrayList<ArrayList<Integer>> n,int val){
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
for(int i=0;i<n.size();i++){
for(int j=0;j<n.get(i).size()+1;j++){
ArrayList<Integer> tmp = new ArrayList<Integer>(n.get(i));
tmp.add(j,val);
list.add(tmp);
}
}
return list;
}
}
lc上还有很多permutation的题目,建议一起拿下