题目:
给定一个不含重复数字的数组 nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
代码:
class Solution {private int[] nums;private List<Integer> path; // 记录路径上的数,已选数字private boolean[] onPath; // 记录剩余未选数字private final List<List<Integer>> ans = new ArrayList<>(); // 返回答案public List<List<Integer>> permute(int[] nums) {this.nums = nums;path = Arrays.asList(new Integer[nums.length]);onPath = new boolean[nums.length]; // 默认是falsedfs(0);return ans;}private void dfs(int i) {if (i == nums.length) {ans.add(new ArrayList<>(path));return;}for (int j = 0; j < nums.length; ++j) {if (!onPath[j]) {path.set(i, nums[j]);onPath[j] = true;dfs(i + 1);onPath[j] = false; // 恢复现场}}}
}