对于可变长度的子序列,我有这个解决方案。
Java 代码:
public static void main(String[] args) {
int[] arr = {91, 58, 89, 87, 25, 65, 21};
int n = 3;
sum(arr, 0, n, 0);
}
public static void sum(int[] arr, int startIdx, int deep, int currSum) {
if (deep == 1) {
for (int i = startIdx; i < arr.length; i++)
System.out.println(currSum + arr[i]);
} else {
for (int i = startIdx; i < arr.length; i++)
sum(arr, i + 1, deep - 1, currSum + arr[i]);
}
}
统一更新:
如果您需要将结果作为列表获取,您可以使用此变体:
public static void main(String[] args) {
int[] arr = {91, 58, 89, 87, 25, 65, 21};
int n = 3;
List<Integer> sums = sum(arr, n, 0);
System.out.println(sums);
}
public static List<Integer> sum(int[] arr, int deep, int currSum) {
List<Integer> list = new ArrayList<>();
if (deep == 1) {
for (int value : arr) list.add(currSum + value);
} else {
for (int i = 0; i < arr.length; i++)
list.addAll(sum(Arrays.copyOfRange(arr, i + 1, arr.length), deep - 1, currSum + arr[i]));
}
return list;
}