整数拆分

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

 

以上是关于整数拆分的主要内容,如果未能解决你的问题,请参考以下文章

写写代码系列032:整数拆分(动态规划)

为啥将拆分为 wav 文件的旋律转换为拆分的 mp3 会在片段边界处产生不好的声音?

pandas GroupBy上的方法apply:一般性的“拆分-应用-合并”

代码随想录算法训练营第四十一天 | 343.整数拆分96.不同的二叉搜索树

将 JavaScript 字符串拆分为固定长度的片段

sql将字符串拆分为始终相同数量的片段