通常将数组分配给临时数组与创建新数组然后分配它有什么区别?
What's the difference between assigning an array to a temp array normally vs making a new array and then assigning it?
我试图解决一个 leetcode 问题(问题 78),逻辑对我来说很清楚,但出于某种原因,我永远无法实现它。
class Solution {
public List<List<Integer>> subsets(int[] nums) {
ArrayList<List<Integer>> arr = new ArrayList();
arr.add(new ArrayList<>());
for (int i = 0; i<nums.length; i++) {
int n = arr.size();
for (int j = 0; j<n; j++) {
List<Integer> temp = new ArrayList(arr.get(j)) ;
temp.add(nums[i]);
arr.add(temp);
}
}
return arr;
}
}
上面的代码工作得很好(因为我在复制 arr.get(j) 数组之前创建了一个新的 ArrayList)但是下面的代码没有
class Solution {
public List<List<Integer>> subsets(int[] nums) {
ArrayList<List<Integer>> arr = new ArrayList();
arr.add(new ArrayList<>());
for (int i = 0; i<nums.length; i++) {
int n = arr.size();
for (int j = 0; j<n; j++) {
List<Integer> temp = arr.get(j) ;
temp.add(nums[i]);
arr.add(temp);
}
}
return arr;
}
}
抱歉,如果我听起来很沮丧,但是,为什么!在世界的屋顶上,第二个代码产生了奇怪的结果?有什么不同?我在这上面浪费了几个小时。
第一个,是将 arr.get(j)
的 浅拷贝 复制到 temp
。
第二种解决方案只是将arr.get(j)
(这是一个引用)的值复制到temp
。他们都将引用同一个对象。
我试图解决一个 leetcode 问题(问题 78),逻辑对我来说很清楚,但出于某种原因,我永远无法实现它。
class Solution {
public List<List<Integer>> subsets(int[] nums) {
ArrayList<List<Integer>> arr = new ArrayList();
arr.add(new ArrayList<>());
for (int i = 0; i<nums.length; i++) {
int n = arr.size();
for (int j = 0; j<n; j++) {
List<Integer> temp = new ArrayList(arr.get(j)) ;
temp.add(nums[i]);
arr.add(temp);
}
}
return arr;
}
}
上面的代码工作得很好(因为我在复制 arr.get(j) 数组之前创建了一个新的 ArrayList)但是下面的代码没有
class Solution {
public List<List<Integer>> subsets(int[] nums) {
ArrayList<List<Integer>> arr = new ArrayList();
arr.add(new ArrayList<>());
for (int i = 0; i<nums.length; i++) {
int n = arr.size();
for (int j = 0; j<n; j++) {
List<Integer> temp = arr.get(j) ;
temp.add(nums[i]);
arr.add(temp);
}
}
return arr;
}
}
抱歉,如果我听起来很沮丧,但是,为什么!在世界的屋顶上,第二个代码产生了奇怪的结果?有什么不同?我在这上面浪费了几个小时。
第一个,是将 arr.get(j)
的 浅拷贝 复制到 temp
。
第二种解决方案只是将arr.get(j)
(这是一个引用)的值复制到temp
。他们都将引用同一个对象。