Total Accepted: 12737Total Submissions: 41350
Given a collection of numbers, return all possible permutations.
For example,
[1,2,3]
have the following permutations:
[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
,[3,1,2]
, and [3,2,1]
.
public class Solution {
public ArrayList<ArrayList<Integer>> permute(int[] num) {
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> path = new ArrayList<Integer>();
dfs(num, list, path, 0);
return list;
}
public void dfs(int[] num, ArrayList<ArrayList<Integer>> list, ArrayList<Integer> path, int index) {
if (path.size() == num.length) list.add(new ArrayList<Integer>(path));
else if (index < num.length) {
for (int i = 0; i <= index; i++) {
path.add(i, num[index]);
dfs(num, list, path, index + 1);
path.remove(i);
}
}
}
}
public class Solution {
public ArrayList<ArrayList<Integer>> permute(int[] num) {
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
dfs(num, list, 0);
return list;
}
public void dfs(int[] num, ArrayList<ArrayList<Integer>> list, int index) {
if(index == num.length) {
ArrayList<Integer> path = new ArrayList<Integer>();
for (int i = 0; i < num.length; i++) path.add(num[i]);
list.add(path);
return;
}
for (int i = index; i < num.length; i++) {
swap(num, index, i);
dfs(num, list, index + 1);
swap(num, index, i);
}
}
public void swap(int[] num, int a, int b) {
int tmp = num[a];
num[a] = num[b];
num[b] = tmp;
}
}