题目描述
对于一个正整数 瀁 的划分,就是把 n 变成一系列正整数之和的表达式。注意,划分与顺序无关,例如 6=5+1.跟 6=1+5 是同一种分划,另外,这个整数本身也是一种分划。
例如:对于正整数 n=5,可以划分为:
1+1+1+1+1
1+1+1+2
1+1+3
1+2+2
2+3
1+4
5
输入描述
输入一个正整数 n
输出描述
输出 n 整数划分的总数 ans
解法一
解题思路
蛮力法
如 n = 4时
a = [[4]]
ans = [[4]]
i = 1,a[-1][-1] - i > 0,a.append([i,ans[-1][-1]]) ,a = [[4],[1,3]]
i = 1,a[-1][-1] - i > 0,a.append([i,ans[-1][-1]]) ,a = [[4],[1,3],[1,1,2]]
i = 1,a[-1][-1] - i > 0,a.append([i,ans[-1][-1]]) ,a = [[4],[1,3],[1,1,2],[1,1,1,1]]
i = 1,a[-1][-1] - i == 0,i = i + 1 = 2,并将a中元素存入ans中(注意,ans中存在元素不要重复存入)ans = [[4],[1,3][1,1,2],[1,1,1,1]]
i = 2,a = [4],a[-1][-1] - i > 0,a.append([i,ans[-1][-1]]) ,a = [[4],[2,2]]
i = 2,a[-1][-1] - i == 0,i = i + 1 = 3,ans = [[4],[1,3][1,1,2],[1,1,1,1],[2,2]]
i = 3,i >= n/2,停止程序
最终ans = [[4],[1,3][1,1,2],[1,1,1,1],[2,2]],有5种分解情况
python代码
#整数划分
def solution(n):
ans = [[n]]
for i in range(1,n):
a = [[n]]
while a[-1][-1] - i> 0:
tmp = a[-1][:-1] + [i,a[-1][-1] - i]
tmp.sort()
if tmp not in a:
a.append(tmp)
for j in a:
if j not in ans:
ans.append(j)
#for j in ans:
# print(j)
return len(ans)
if __name__ == '__main__':
n = 5
ans = solution(n)
print(ans)
运行结果