Problem Description:
Given a collection of distinct integers, return all possible permutations.
Example:
Input: [1,2,3] Output: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
Code:
class Solution {
List<List<Integer>> res = new ArrayList<List<Integer>>();
public List<List<Integer>> permute(int[] nums) {
boolean[] flag = new boolean[nums.length + 1];
for(boolean t : flag) {
t = false;
}
List<Integer> tmp = new ArrayList<Integer>();
for(int i = 0; i < nums.length; i++) {
flag[i] = true;
tmp.add(nums[i]);
func(flag, i, nums, tmp);
flag[i] = false;
tmp.remove(0);
}
return res;
}
void func(boolean[] flag, int cur, int[] nums, List<Integer> tmp) {
if(tmp.size() == nums.length) {
List<Integer> out = new ArrayList<Integer>();
out.addAll(tmp);
res.add(out);
return;
}
for(int i = 0; i < nums.length; i++) {
if(!flag[i]) {
flag[i] = true;
tmp.add(nums[i]);
func(flag, i, nums, tmp);
flag[i] = false;
tmp.remove(tmp.size()-1);
}
}
}
}