我正在尝试运行以下代码,它打印给定集合的所有子集。当我将subsets(int[] nums)函数的返回类型更改为ArrayList<ArrayList<Integer>> subsets(int[] nums),但不适用于List<List<Integer>> subsets(int[] nums). 我需要将返回类型设为List<List<Integer>>. 我该如何解决?
public class TestPractice {
public static void main(String[] args){
int[] x = {1,2};
System.out.println(subsets(x));
}
public static List<List<Integer>> subsets(int[] nums) {
List<ArrayList<Integer>> subsets = new ArrayList<ArrayList<Integer>>();
if (nums.length ==1){
ArrayList<Integer> subset1 = new ArrayList<Integer>();
ArrayList<Integer> subset2 = new ArrayList<Integer>();
subset2.add(nums[0]);
subsets.add(subset1);
subsets.add(subset2);
return subsets;
}
int[] nums_1 = new int[nums.length-1];
for(int i = 0; i< nums.length-1; i++) {
nums_1[i]=nums[i];
}
List<ArrayList<Integer>> subsets2= subsets(nums_1);
ArrayList<ArrayList<Integer>> final_set = new ArrayList<ArrayList<Integer>>(subsets2);
for(ArrayList<Integer>subset: subsets2) {
ArrayList<Integer> subset1 = new ArrayList<Integer>();
subset1.add(nums[nums.length-1]);
subset1.addAll(subset);
final_set.add(subset1);
}
return final_set;
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅此处了解为什么无法将 a 转换List<ArrayList>为 a List<List>。
另一方面,要修复您的错误,您可以简单地不将变量声明为List<ArrayList<Integer>>并使用List<List<Integer>>。您可以这样做,因为您没有使用任何仅存在于 中ArrayList但不存在于 中的成员List。您也不需要在实例化类时指定泛型参数,因为它们可以被推断出来。
public static List<List<Integer>> subsets(int[] nums) {
// notice the change here!
List<List<Integer>> subsets = new ArrayList<>();
if (nums.length ==1){
ArrayList<Integer> subset1 = new ArrayList<>();
ArrayList<Integer> subset2 = new ArrayList<>();
subset2.add(nums[0]);
subsets.add(subset1);
subsets.add(subset2);
return subsets;
}
int[] nums_1 = new int[nums.length-1];
for(int i = 0; i< nums.length-1; i++) {
nums_1[i]=nums[i];
}
// notice the change here!
List<List<Integer>> subsets2= subsets(nums_1);
// notice the change here!
ArrayList<List<Integer>> final_set = new ArrayList<>(subsets2);
// notice the change here!
for(List<Integer>subset: subsets2) {
ArrayList<Integer> subset1 = new ArrayList<>();
subset1.add(nums[nums.length-1]);
subset1.addAll(subset);
final_set.add(subset1);
}
return final_set;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |