欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的 任意个数之和 等于 target,并打印出所有结果的索引。

程序员文章站 2024-02-01 21:50:40
...

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的 任意个数之和 等于 target,并打印出所有结果的索引。

例如: nums = [1,5,8,17,29,33,39,11,16] ,target = 33
结果1:5 ,结果2:3,8,…

!!!! 把输出结果保存到代码后面 !!!!

import java.util.*;

public class ArrayListTest {
private static final int[] Data = {1,5,8,17,29,33,39,11,16};
private static final int target =29;
public static void main(String[] args) {
GetAllSubsets example = new GetAllSubsets();
example.populateSubset(Data, 0, new int[Data.length], 0, target);
}
}
class GetAllSubsets {

public void populateSubset(final int[] data, int fromIndex,
                           final int[] result, final int resultLen, final int target) {
    if (target == 0) {
        printResult(Arrays.copyOf(result, resultLen));
        return;
    }

    while (fromIndex < data.length && data[fromIndex] > target) {
        fromIndex++;
    }

    while (fromIndex < data.length && data[fromIndex] <= target) {
        result[resultLen] = fromIndex;
        populateSubset(data, fromIndex + 1, result, resultLen + 1, target
                - data[fromIndex]);
        fromIndex++;
    }
}

private void printResult(int[] copyOf) {
    StringBuilder sb = new StringBuilder();
    for (Integer i : copyOf) {
        sb.append(i).append(",");
    }
    System.out.println(sb.deleteCharAt(sb.length() - 1).toString());
}

}

例:nums = [1,5,8,17,29,33,39,11,16] ,target = 33 输出:
1,3,7
3,8
5

请问大家这个算法哪里出错了 为什么结果不全。

推荐阅读