Problem
Given a list of numbers, return all possible permutations.
Notice
You can assume that there is no duplicate numbers in the list.
Example
For nums = [1,2,3], the permutations are:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路
同permutation II, 少了重复元素, 不用排序
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
if (nums == null || nums.length == 0) {
result.add(new ArrayList<Integer>());
return result;
}
boolean[] visited = new boolean[nums.length];
helper(nums, result, new ArrayList<Integer>(), visited);
return result;
}
private void helper(int[] nums, List<List<Integer>> result, List<Integer> path, boolean[] visited) {
for (int i = 0; i < nums.length; i++) {
if (visited[i]) continue;
visited[i] = true;
path.add(nums[i]);
if (path.size() == nums.length) {
result.add(new ArrayList<Integer>(path));
} else {
helper(nums, result, path, visited);
}
path.remove(path.size() - 1);
visited[i] = false;
}
}