279. 完全平方数
-
解题思路:先想一下暴力怎么做。直接看代码更清晰
# rest:还剩下的数字 def process(self, rest): if rest == 0: return 0 ans = 2 ** 31 - 1 # 从1开始尝试,最多尝试到sqrt(rest) for i in range(1, int(math.sqrt(rest)) + 1): # 要取最小值 ans = min(ans, self.process(rest - i * i) + 1) return ans
-
- 一个参数,一维的动态规划,加记忆化搜索表即可
-
代码
class Solution: def process(self, rest, dp): if rest == 0: return 0 if dp[rest] != -1: return dp[rest] ans = 2 ** 31 - 1 for i in range(1, int(math.sqrt(rest)) + 1): ans = min(ans, self.process(rest - i * i, dp) + 1) dp[rest] = ans return ans def numSquares(self, n: int) -> int: dp = [-1] * (n + 1) return self.process(n, dp)

浙公网安备 33010602011771号