Leetcode 279. 完全平方数
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
Code
def numSquares(self, n):
# write your code here
dp=[[0] for _ in range(n+1)]#dp[i]表示i最少被分成几个完全平方数之和
dp[0]=0#初始化
for i in range(1,n+1,1):
j=1
dp[i]=float('inf')
while j*j<=i:
if dp[i-j*j]+1<dp[i]
dp[i] = min(dp[i], dp[i-j*j] + 1)
j=j+1
return dp[n]
想法
- dp[i-jj]+1<dp[i]即dp[i-jj]<=dp[i],判定其是否可以组成和的完s全平方数,如果大于其必然不可以。