https://leetcode-cn.com/problems/permutations/
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
boolean[] visited = new boolean[nums.length];
backtrack(res, nums, new ArrayList<Integer>(), visited);
return res;
}
private void backtrack(List<List<Integer>> res, int[] nums, ArrayList<Integer> tmp, boolean[] visited){
if(tmp.size() == nums.length){
res.add(new ArrayList<>(tmp));
return;
}
for(int i = 0; i < nums.length; i++){
if(visited[i] == true) continue;
visited[i] = true;
tmp.add(nums[i]);
backtrack(res, nums, tmp, visited);
visited[i] = false;
tmp.remove(tmp.size() - 1);
}
}
}