你好,关于list集合添加集合对象的问题
您好,之前问过相关的问题,由于代码太长就没能贴出来继续询问,这是一个寻找一个数组所有子集的方法,请问在Solution类当中的backTrack方法中list.add(new ArrayList(temp));语句,为什么不能直接添加temp,而需要添加new ArrayList(temp)才能够得到正确结果呢?想问下这两个语法上有什么区别吗?
直接添加temp不会报错,但是最后得到结果是错误的,比如说输入数组 [1,2,3],正确结果为[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]],但是直接添加temp的话输出结果为[[],[],[],[],[],[],[],[]],不能得到正确结果
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
backTrack(0,nums,list,new ArrayList<Integer>());
return list;
}
private void backTrack(int i, int[] nums, List<List<Integer>> list, ArrayList<Integer> temp){
list.add(new ArrayList(temp));
for(int j = i; j < nums.length; j++){
temp.add(nums[j]);
backTrack(j+1,nums,list,temp);
temp.remove(temp.size() - 1);
}
}
}
public class MainClass {
public static int[] stringToIntegerArray(String input) {
input = input.trim();
input = input.substring(1, input.length() - 1);
if (input.length() == 0) {
return new int[0];
}
String[] parts = input.split(",");
int[] output = new int[parts.length];
for(int index = 0; index < parts.length; index++) {
String part = parts[index].trim();
output[index] = Integer.parseInt(part);
}
return output;
}
public static String integerArrayListToString(List<Integer> nums, int length) {
if (length == 0) {
return "[]";
}
String result = "";
for(int index = 0; index < length; index++) {
Integer number = nums.get(index);
result += Integer.toString(number) + ", ";
}
return "[" + result.substring(0, result.length() - 2) + "]";
}
public static String integerArrayListToString(List<Integer> nums) {
return integerArrayListToString(nums, nums.size());
}
public static String int2dListToString(List<List<Integer>> nums) {
StringBuilder sb = new StringBuilder("[");
for (List<Integer> list: nums) {
sb.append(integerArrayListToString(list));
sb.append(",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
int[] nums = stringToIntegerArray(line);
List<List<Integer>> ret = new Solution().subsets(nums);
String out = int2dListToString(ret);
System.out.print(out);
}
}
}
正在回答 回答被采纳积分+1
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星