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 @   ouyangxx  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示