嘗試用遞歸解決這個problem但輸入7168得到錯誤的答案。完美的正方形leetcode丟失遞歸解決方案的測試用例
給定一個正整數n,求出與n和的完美平方數(例如,1,4,9,16,...)的最小數。例如,給定n = 12,返回3,因爲12 = 4 + 4 + 4;給定的n = 13,返回2,因爲13 = 4 + 9
def recursive(self, n, result, dp):
if n in dp:
return dp[n]
#very large number
large_no = 1 << 31
if n < 1:
return 0
#checking if n is a square or not?
r = n**0.5
if int(r)*int(r) == n:
return result + 1
#iterate from square root till 1 checking all numbers
r = int(r)
while r >= 1:
large_no = min(large_no, self.recursive(n - int(r)*int(r), result + 1, dp))
r -= 1
#memoize the result
dp[n] = large_no
return large_no
我打電話上述函數爲這樣:self.recursive(7168,0,{})
回答應該是4但我越來越5.請不要建議替代方法來解決這個問題,因爲我已經嘗試過它們,它的工作原理。我在這裏只是知道這個邏輯的問題。
添加打印到頂部方法:'print(n,result,dp)'。運行它的一小部分(例如12),看看你正在記憶的值。他們對我來說似乎是錯誤的:例如'{2:4,3:4,5:6,...}'。那是你打算做什麼的?通常情況下,你想記住正確的答案:例如'{2:2,3:3,4:1等]'。也許我不明白你的算法。 – FMc
那麼什麼是7168的最佳四項分解(你的代碼沒有找到)? – NPE
@NPE(80,16,16,16) –