今天在做LeetCode46.全排列题时:
46. 全排列 - 力扣(LeetCode)
class Solution {
List<List<Integer>> res = new LinkedList<>();
LinkedList<Integer> track = new LinkedList<>();
boolean[] vis;
public List<List<Integer>> permute(int[] nums) {
int len = nums.length;
vis = new boolean[len];
backtrack(nums);
return res;
}
public void backtrack(int[] nums) {
int len = nums.length;
if(track.size() == len){
res.add(new LinkedList<>(track));
return;
}
for(int i=0;i<len;i++){
if(vis[i]){
continue;
}
track.addLast(nums[i]);
vis[i] = true;
backtrack(nums);
vis[i] = false;
track.removeLast();
}
}
}
public static LinkedList<Integer> path = new LinkedList<>();
public static LinkedList<LinkedList<Integer>> res = new LinkedList<>();
1.共同点:
都是向res这个ArrayList中填加了一个名为path的链表
2.不同点:
res.add(new ArrayList(path)):开辟一个独立地址,地址中存放的内容为path链表,后续path的变化不会影响到res
res.add(path):将res尾部指向了path地址,后续path内容的变化会导致res的变化。
3.例子
引自:
https://blog.csdn.net/weixin_42707971/article/details/107609388