写一个程序, 要求功能:求出用 1,2,5 这三个数不同个数组合的和为 100 的组合个 数

136 阅读1分钟
public class CombinationSum {
    public static void main(String[] args) {
        int target = 100;
        int[] numbers = {1, 2, 5};
        int count = countCombinations(target, numbers);
        System.out.println("组合个数: " + count);
    }

    public static int countCombinations(int target, int[] numbers) {
        // 创建一个数组来存储每个目标值的组合个数
        int[] dp = new int[target + 1];
        dp[0] = 1; // 初始条件:和为 0 的组合个数为 1(即不选任何数)

        // 动态规划计算每个目标值的组合个数
        for (int num : numbers) {
            for (int i = num; i <= target; i++) {
                dp[i] += dp[i - num];
            }
        }

        return dp[target];
    }
}

代码说明

  1. 主函数

    • 定义目标值 target 为 100。
    • 定义可用的数字数组 numbers 为 {1, 2, 5}。
    • 调用 countCombinations 函数计算组合个数并输出结果。
  2. countCombinations 函数

    • 使用动态规划方法来计算组合个数。
    • 创建一个数组 dp,其中 dp[i] 表示和为 i 的组合个数。
    • 初始化 dp[0] 为 1,表示和为 0 的组合个数为 1(即不选任何数)。
    • 遍历每个可用的数字 num,更新 dp 数组中的值。
    • 对于每个 num,从 num 到 target 进行遍历,更新 dp[i] 的值为 dp[i] + dp[i - num]
  3. 输出结果

    • 最后返回 dp[target],即和为 100 的组合个数。