279. 完全平方数

  1. 题目链接

  2. 解题思路:先想一下暴力怎么做。直接看代码更清晰

    # 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
    
    • 一个参数,一维的动态规划,加记忆化搜索表即可
  1. 代码

    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)
    
posted @ 2025-02-17 10:44  ouyangxx  阅读(35)  评论(0)    收藏  举报