Using linked list:
public class Solution {
public ArrayList<ArrayList<Integer>> permute(int[] num) {
// if need to be unique, sort it first
// Arrays.sort(num);
LinkedList<Integer>l=new LinkedList<Integer>();
for(int i:num){
l.add(i);
}
return permute(l);
}
public ArrayList<ArrayList<Integer>> permute(LinkedList<Integer>l) {
ArrayList<ArrayList<Integer>>result=new ArrayList<ArrayList<Integer>>();
if(l.size()==0)return result;
if(l.size()==1){
ArrayList<Integer> n=new ArrayList<Integer>();
n.add(l.get(0));
result.add(n);
return result;
}
for(int i=0;i<l.size();i++){
// create a new array without i
int current=l.get(i);
// if need to be unique, add following line:
// if(i>0&¤t==l.get(i-1))continue;
l.remove(i);
ArrayList<ArrayList<Integer>>tresult=permute(l);
for(ArrayList<Integer>rr:tresult){
rr.add(0,current);
}
result.addAll(tresult);
l.add(i,current);
}
return result;
}
}
Just use array:
public ArrayList<ArrayList<Integer>> permute(int[] num) {
// Start typing your Java solution below
// DO NOT write main() function
ArrayList<ArrayList<Integer>>result=new ArrayList<ArrayList<Integer>>();
if(num.length==0)return result;
if(num.length==1){
ArrayList<Integer> n=new ArrayList<Integer>();
n.add(num[0]);
result.add(n);
return result;
}
for(int i=0;i<num.length;i++){
// create a new array without i
int[]newnum=new int[num.length-1];
int j=0;
while(j<newnum.length){
newnum[j]=num[j<i?j:j+1];
j++;
}
ArrayList<ArrayList<Integer>>tresult=permute(newnum);
for(ArrayList<Integer>rr:tresult){
rr.add(0,num[i]);
}
result.addAll(tresult);
}
return result;
}