編程之法:面試和算法心得(尋找和爲定值的多個數)

內容所有來自編程之法:面試和算法心得一書,實現是本身寫的使用的是java

題目描述

輸入兩個整數n和sum,從數列1,2,3.......n 中隨意取幾個數,使其和等於sum,要求將其中全部的可能組合列出來。java

分析與解法

解法一

注意到取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);
    }
}
相關文章
相關標籤/搜索