码迷,mamicode.com
首页 > 编程语言 > 详细

编程之法:面试和算法心得(寻找和为定值的多个数)

时间:2018-01-11 20:31:26      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:res   mes   int   number   return   就是   相关   nbsp   body   

内容全部来自编程之法:面试和算法心得一书,实现是自己写的使用的是java

题目描述

输入两个整数n和sum,从数列1,2,3.......n 中随意取几个数,使其和等于sum,要求将其中所有的可能组合列出来。

分析与解法

解法一

注意到取n,和不取n个区别即可,考虑是否取第n个数的策略,可以转化为一个只和前n-1个数相关的问题。

  • 如果取第n个数,那么问题就转化为“取前n-1个数使得它们的和为sum-n”,对应的代码语句就是sumOfkNumber(sum - n, n - 1);
  • 如果不取第n个数,那么问题就转化为“取前n-1个数使得他们的和为sum”,对应的代码语句为sumOfkNumber(sum, n - 1)。

参考代码如下:

/*
 * 寻找和为定值的多个数
 */
public class SearchSomeSureValue {
    static int length;
    static void findResult(int n,int m,int flag[]){
        if (n<=0||m<=0) {
            return;
        }
        if (n>m) {
            n=m;
        }
        if (n==m) {
            flag[n-1]=1;
            for (int i = 0; i < length; i++) {
                if (flag[i]==1) {
                    System.out.print(i+1+" ");
                }
                
            }
            System.out.println();
            flag[n-1]=0;
        }
        
        flag[n-1]=1;
        findResult(n-1, m-n, flag);
        
        flag[n-1]=0;        
        findResult(n-1, m, flag);
    }
    public static void main(String[] args) {
        int n=5,m=5;
        length=n;
        int[] flag=new int[n];
        findResult(n, m, flag);
    }
}

 

编程之法:面试和算法心得(寻找和为定值的多个数)

标签:res   mes   int   number   return   就是   相关   nbsp   body   

原文地址:https://www.cnblogs.com/icysnow/p/8269997.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!