一个比较基础的问题,深搜解决。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;
}
}