python分割数字_python实现整数拆分,输出拆分序列
昨天筆試VIPKID有一道關于整數拆分的題目,要求輸出拆分后的序列,當時沒有做出來,記錄一下可以實現的想法:
題目示例:
從鍵盤讀入一個數 n, 輸出所有和為 n 的子序列和,包括 n
測試用例:
輸入 5
輸出:
1 + 1 + 1 + 1 + 1
1 + 1 + 1 + 2
1 + 1 + 3
1 + 2 + 2
1 + 4
2 + 3
5
解題思路:首先這類需要不斷分解的題目,首先想到的是遞歸法,也就是說將一個大數不斷的分解為小數,然后將每一個分解的子數保存在一個 list 中,退出條件為當 n 的值減為 0,然后輸出 list 中的值。
def resolve(n, minFlag):
global resCnt
global resList
global p
if n == 0:
resCnt += 1
for i in range(p):
print(resList[i], end="")
if i == p-1: # 當輸出到最后一個數字時,不輸出 '+'
continue
else:
print("+", end="")
print("")# 輸出list中的值以后,換行
for i in range(minFlag, n+1):
resList[p] = i
p += 1
resolve(n-i, i)
p -= 1
if __name__ == '__main__':
# n = int(input())
n = 5
resCnt = 0# 記錄子序列的個數
resList = [0] * n
minFlag = 1# 為了保證不重復,維護一個minFlag,來確保每次拆分后的最小值
p = 0
resolve(n, minFlag)
之前在寫這道程序題時,使用n, m兩個數來做遞歸。初始值 n = m。
然后每次做判斷:
當 n=1 or m = 1 時:
當 n = 1, 直接輸出1, 當 m = 1 時,輸出 n 個1
當 n = m 時,調用遞歸函數 divideNum(n, m-1) + 1
當 n < m 時,divideNum(n, n)
當 n > m 時,也分為兩種情況:
(1) 第一種 divideNum(n, m-1)
(2) 第二種 divideNum(n-m, n),將這兩種的結果相加。
當時通過這種思路來解時,不知道如何輸出分解的子序列,只能得出能夠分解子序列的個數。
今天上午重新考慮了遞歸的思路,記錄一下能夠實現的方法。
標簽:__,輸出,divideNum,minFlag,python,拆分,序列
來源: https://blog.csdn.net/poplarlang/article/details/101428971
總結
以上是生活随笔為你收集整理的python分割数字_python实现整数拆分,输出拆分序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ora00936缺失表达式怎么解决_正则
- 下一篇: python结束循环_python中br