寻找和为Sum的多个数-1

原创 2016年09月23日 18:04:20

1. 题意

给定两个正整数,N和Sum,其中N表示 1…N这样一个由N个连续的整数数组成的序列,而Sum表示从这1…N个数中,任意取K个数,使其和为Sum,其中1<=K<=N,要求输出所有可能的组合数。

2. 解法

核心思想: 将n问题转换为n-1问题

对于这样1..N的N个数,我们可以考虑是否选择第N个数来解决,问题就可以转换成N-1个数的问题,也就是说:

1)如果我们取了第N个数,那么问题就变成了”在1..N-1这个N-1个数中,选取K个数,使得其和为Sum-N”

2)如果我们不取第N个数,那么问题就变成了”在1..N-1这个N-1个数中,选取K个数,使得其和为Sum”

对于以上分析,我们定义一个函数SumOfKValue, 其实现如下:

 /**
 * Created by ChaoNi on 2016/9/23.
 */

import java.util.*;

public class Main{

    //记录选取的数字
    private static LinkedList<Integer> arrayList = new LinkedList<>();

    public static void main(String[] args) {
         SumOfkValue(10,10);
    }

    public static void SumOfkValue(int sum, int n) {
        if (n <= 0 || sum == 0) return;

        //输出找到的结果
        if (sum == n) {
            //反转list
            Collections.reverse(arrayList);
            for (int t : arrayList) {
                System.out.print(t + " ");
            }
            System.out.print(n + "\r\n");
            Collections.reverse(arrayList);
        }

        //表示选取第N个数
        arrayList.add(0, n);
        SumOfkValue(sum - n, n - 1);
        //表示不选取第N个数
        arrayList.remove(0);
        SumOfkValue(sum, n - 1);
    }

}

3. 结果

上面的程序测试用例中N=10,Sum=10,将得到如下的输入结果
10
9 1
8 2
7 3
7 2 1
6 4
6 3 1
5 4 1
5 3 2
4 3 2 1

共有10组!

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

寻找和为Sum的多个数-2

1. 题意前一篇文章中,我们可以明显发现,其要求是一个连续的N中选取K个数使其和为Sum,这里我们可以对其举一反三,也即在一个给定的数组Arr中(注意这里不要求数组中数据是连续的),任意的从中选取K个...

和为定值的多个数 (n问题转化为n-1问题)

/* description: 输入两个整数n和sum,从数列1,2,3.......n 中随意取几个数,使其和等于sum,要求将其中所有的可能组合列出来。方法1: 注意到取n,和不取n个区别即可,考...

数组去重、冒泡排序、1-100随机产生10个数、字符串中找最多出现的单个字符

数组去重 冒泡排序 1-100随机产生10个数 字符串中找最多出现的单个字符

【LeetCode-面试算法经典-Java实现】【001-Two Sum(求两个数的和)】

给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字。要求:这个函数twoSum必须要返回能够相加等于目标数字的两个数的索引,且index1必须要小于index2。请注意一点,你返回的结果(包...

【LeetCode-面试算法经典-Java实现】【015-3 Sum(三个数的和)】

【013-3 Sum(三个数的和)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given an array S of n integers, are there el...

LeetCode 15 3Sum 找出数组里面3个数的和等于指定值。

题目:Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Fi...

HDU 1024 Max Sum Plus Plus求前n个数中的若干个数分为连续的m段的最大和值(解析)

HDU 1024 Max Sum Plus Plus求前n个数中的若干个数分为连续的m段的最大和值(解析)...

LeetCode OJ 之 Two Sum(两个数的和)

题目: Given an array of integers, find two numbers such that they add up to a specific target num...

LeetCode 16 3Sum Closest 找出最接近指定target的三个数的和

题目: Given an array S of n integers, find three integers in S such that the sum is closest to a gi...

【LeetCode-面试算法经典-Java实现】【016-3 Sum Closest(最接近的三个数的和)】

【016-3 Sum Closest(最接近的三个数的和)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given an array S of n integers, ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:寻找和为Sum的多个数-1
举报原因:
原因补充:

(最多只允许输入30个字)