整合dalao們的方法後的自己理解。
寫的超級好,很明白
乙個正整數可以劃分為多個正整數的和,比如n=3時:3;1+2;1+1+1;
共有三種劃分方法。現給出乙個正整數,問有多少種劃分方法。n< =100
例如:(方便檢測)
輸入 :3 輸出:3
輸入: 5 輸出:7
輸入:10 輸出:42
看了網上的方法,大多都是用下面這個遞迴,主要是要看懂。
n : 要 被劃分 的數
m : n 被 小於/等於 m 的數 劃分
n=1 : 只能是 1 這乙個劃分了
m=1 : n 只能被 1 劃分,也就是 n個1了
nn==m : n被小於等於自己的數劃分 (1)+(2)
(1)n被等於自己的數劃分 :那就乙個數 n
(2)n被小於自己的數劃分:(n,n-1),就相當於 n被小於等於 n-1 的數劃分
n>m : 和 n==m 思路差不多 ;例如(6,4)
(1)n被等於m的數(即m)劃分:(n-m,m) ;(2,4):看看n被乙個m劃分後,還能不能再被小於等於m的數劃分。
(2)n被小於m的數劃分:(n,m-1);(6,3)
int
equation
(int n,
int m)
整數劃分問題
整數劃分問題是乙個經典問題,幾乎在講演算法設計的書中都會講,下面把主要的思想給總結下。所謂整數劃分,就是將乙個正整數n劃分為一系列的正整數之和,如將n可以劃分為 1 我們該如何找出所有的劃分呢?我們可以先來看看整數劃分的規律 譬如正整數 6 劃分情況如下 6 5 14 2 4 1 1 3 3 3 2...
整數劃分問題
給定乙個自然數,分成k部分,a1,a2.的數的和,要求a1 a2.求有多少種?原理 整數n拆分成最多不超過m個數的和的拆分數,和n 拆分成最大不超過m的拆分數相等。根據這個原理,原問題就轉化成了求最大拆分為k的拆分個數與最大拆分為k 1的拆分個數的差 f n,k f n,k 1 f n k,k 如下...
整數劃分問題
首先是遞迴解法 整數劃分問題是將乙個正整數n拆成一組數連加並等於n的形式,且這組數中的最大加數不大於n。如6的整數劃分為 65 1 4 2,4 1 1 3 3,3 2 1,3 1 1 1 2 2 2,2 2 1 1,2 1 1 1 1 1 1 1 1 1 1 共11種。下面介紹一種通過遞迴方法得到乙...