一个比较基础的问题,深搜解决。java 1ms。
一个比较需要注意的点是关于向List<List<Integer>> 中加入新元素的问题,不能直接add(ans) 需要 add(new ArrayList(ans)) 参考https://stackoverflow.com/questions/31064005/add-elements-to-listlistinteger。直接add的是ans的reference,这里需要深复制。
class Solution { private List<Integer> ans = new ArrayList<Integer>(); private List<List<Integer>> ans1 = new ArrayList<List<Integer>>(); public void dfs(int[] nums, int num) { if (num==0) { ans1.add(new ArrayList(ans)); return; } for (int i=0;i<nums.length;i++) { ans.add(nums[i]); int[] nums1 = new int[num-1]; if (num>1) for (int j=0;j<nums.length;j++) { if (j<i) nums1[j]=nums[j]; else if (j>i) nums1[j-1] = nums[j]; } dfs(nums1,num-1); ans.remove(ans.size()-1); } } public List<List<Integer>> permute(int[] nums) { dfs(nums,nums.length); return ans1; } }