java - 通常将数组分配给临时数组与创建新数组然后分配它有什么区别?
问题描述
我试图解决一个 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;
}
}
对不起,如果我听起来很沮丧,但是,为什么!在世界的屋顶上,第二个代码会产生奇怪的结果吗?有什么不同?我在这上面浪费了几个小时。
解决方案
第一个是创建into的浅拷贝。arr.get(j)
temp
第二种解决方案只是将arr.get(j)
(这是一个引用)的值复制到temp
. 它们都将引用同一个对象。
推荐阅读
- c - 什么是计算 floor(log(m / n)) 的有效方法,其中 m 和 n 是整数?
- arrays - 来自 Json 数组的 SwiftUI 列表
- python - 如果列值在任何地方减少,则删除一组行
- c# - 是否可以在 C# 中参数化 [TestInitialize]SetUp()?
- flutter - 如何在颤振中使用来自第三方包资产的图像?
- git - 基于同一文件中的代码的多个拉取请求
- java - TinyGP 在更新它以解决更复杂的符号回归示例时,在平均平均适应度函数中给了我很大的峰值
- api - 使用服务帐户驱动 API,需要安全评估?
- django - 如何将引导程序添加到 Django Form,py?
- python-3.x - 如何从电影数据集中提取用户评分