【发布时间】:2020-10-06 07:59:55
【问题描述】:
我正在做一些与回溯相关的 leetcode 挑战,即: https://leetcode.com/problems/permutations/
我需要返回 List<List<Integer>> 作为类型,但是我的 List<List<Integer>> 只有在我接受 List<Integer> 作为我的参数并且我将其转换为 ArrayList<Integer> 时才能正确填充,同时我将它添加到主要结果中。
代码:
List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
bt(new ArrayList<Integer>(), nums);
return result;
}
public void bt(List<Integer> tmp, int[] nums){
if(tmp.size() == nums.length){
result.add(new ArrayList<>(tmp)); // HERE
}else{
// some logic here
}
}
输出: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
Versus,下面的代码我接受 ArrayList 作为参数
代码:
List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
bt(new ArrayList<Integer>(), nums);
return result;
}
public void bt(ArrayList<Integer> tmp, int[] nums){
if(tmp.size() == nums.length){
result.add(tmp); // HERE
}else{
... some logic here
}
}
输出: [[],[],[],[],[],[]]
【问题讨论】:
-
ArrayList是类型引用,所以这里必须使用new ArrayList<>(tmp),否则tmp的值会在每次递归中发生变化
标签: java list arraylist casting