问题背景:求正整数n所有可能的和式的组合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2)
对于这个题目有两种理解了:
一> 如果将1+1+2和2+1+1当成不同的序列的话,这个问题会相对容易些。
拿n=4这个例子,首先最长的组合肯定是4=1+1+1+1,那么最短的组合是4=4,到最后可能会将4=4这种情况排除掉,所以所有组合的长度一定为1,2,3,4。
那么上面的计算可以得到一个组合数为C(3,0) + C(3,1) + C(3,2) + C(3,3) = 2^3个组合。如果4=4不算,则组合序列有2^3 - 1个,那么对于n则有的个数为2^(n-1) - 1个。
二> 将如果将1+1+2和2+1+1当成相同的序列的话会有点tricky,不过可以使用下面的方法来解决
假设现在得到的一个序列X的长度为N,那么我们可以从这个序列来拓展出长度N-1的序列。
首先统计X中含有几个不同的元素如1+1+2含有2个不同的元素1和2,将任意两个不同的元素相加生成一个新的元素p,用p来替换这个新的元素,这样1+1+2可以拓展出1+3这个序列。
再者,如果某一个元素出现我次数不少于2次,那么就将这个元素的2倍作为一个新的元素来替换掉两个元素,这样1+1+2可以生成2+2,因为1出现了再次。