編程之法:面試和算法心得(尋找和為定值的多個數)
阿新 • • 發佈:2018-01-11
arch 全部 col static 多個 ++ som ava sta
內容全部來自編程之法:面試和算法心得一書,實現是自己寫的使用的是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); } }
編程之法:面試和算法心得(尋找和為定值的多個數)