完全平方数
动态规划DP:
class Solution:
def numSquares(self, n: int) -> int:
dp = [i for i in range(n+1)]
for i in range(1,n+1):
j = 1
while (i - j * j) >= 0:
dp[i] = min(dp[i],dp[i-j*j]+1)
j += 1
return dp[-1]
BFS:
from collections import deque
class Solution:
def numSquares(self, n: int) -> int:
deque_ = deque([n])
visit = set()
step = 0
while deque_:
step += 1
l = len(deque_)
for _ in range(l):
temp = deque_.pop()
for i in range(int(temp**(0.5))+1):
x = temp - i*i
if x == 0:
return step
elif x not in visit:
visit.add(x)
deque_.appendleft(x)
return step