整数拆分
Posted Circle-C
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了整数拆分相关的知识,希望对你有一定的参考价值。
整数划分问题是算法中的一个经典命题之一
所谓整数划分,是指把一个正整数n写成如下形式:
n=m1+m2+m3+....+mi;(其中mi为正整数,并且1<=mi<=n),则{m1,m2,m3,....,mi}为n的一个划分。
如果{m1,m2,m3,....,mi}中的最大值不超过m,即max{m1,m2,m3,....,mi} <= m,则称它属于n的一个m划分。这里我们记n的m划分的个数为f(n,m);
例如当n=4时,它有5个划分:{4}、{3,1}、{2,2}、{2,1,1}、{1,1,1,1};
注意:4=1+3和4=3+1被认为是同一个划分。
Python解法
ans = 0 # 存放解的数量
def divN(n, array): # n是要拆分的整数,k是指解的下标(拆解后的第i个数字)
global ans
for num in range(1, n + 1): # 从1开始尝试拆分
# print(ans, array[1:], "num", num)
if num >= array[-1]:
array2 = array + [num] # 讲这次拆分存放到array2数组中
rest = n - num # 剩下的是n-num
# print(ans, array2[1:], rest, "num", num)
if rest == 0: # 如果没有剩下的,说明本次拆分结束
ans += 1
print(f'解法{ans:3}:', array2[1:])
else: # 如果有剩下的,继续求出array[k+1]
divN(rest, array2)
div(10, [0])
解法 1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
解法 2: [1, 1, 1, 1, 1, 1, 1, 1, 2]
解法 3: [1, 1, 1, 1, 1, 1, 1, 3]
解法 4: [1, 1, 1, 1, 1, 1, 2, 2]
解法 5: [1, 1, 1, 1, 1, 1, 4]
解法 6: [1, 1, 1, 1, 1, 2, 3]
解法 7: [1, 1, 1, 1, 1, 5]
解法 8: [1, 1, 1, 1, 2, 2, 2]
解法 9: [1, 1, 1, 1, 2, 4]
解法 10: [1, 1, 1, 1, 3, 3]
解法 11: [1, 1, 1, 1, 6]
解法 12: [1, 1, 1, 2, 2, 3]
解法 13: [1, 1, 1, 2, 5]
解法 14: [1, 1, 1, 3, 4]
解法 15: [1, 1, 1, 7]
解法 16: [1, 1, 2, 2, 2, 2]
解法 17: [1, 1, 2, 2, 4]
解法 18: [1, 1, 2, 3, 3]
解法 19: [1, 1, 2, 6]
解法 20: [1, 1, 3, 5]
解法 21: [1, 1, 4, 4]
解法 22: [1, 1, 8]
解法 23: [1, 2, 2, 2, 3]
解法 24: [1, 2, 2, 5]
解法 25: [1, 2, 3, 4]
解法 26: [1, 2, 7]
解法 27: [1, 3, 3, 3]
解法 28: [1, 3, 6]
解法 29: [1, 4, 5]
解法 30: [1, 9]
解法 31: [2, 2, 2, 2, 2]
解法 32: [2, 2, 2, 4]
解法 33: [2, 2, 3, 3]
解法 34: [2, 2, 6]
解法 35: [2, 3, 5]
解法 36: [2, 4, 4]
解法 37: [2, 8]
解法 38: [3, 3, 4]
解法 39: [3, 7]
解法 40: [4, 6]
解法 41: [5, 5]
解法 42: [10]
C语言解法
(4条消息) 整数拆分问题的四种解法_NEWPLAN的专栏-CSDN博客_整数拆分
https://blog.csdn.net/u011889952/article/details/44813593
以上是关于整数拆分的主要内容,如果未能解决你的问题,请参考以下文章
为啥将拆分为 wav 文件的旋律转换为拆分的 mp3 会在片段边界处产生不好的声音?
pandas GroupBy上的方法apply:一般性的“拆分-应用-合并”