美文网首页
LeetCode 279. 完全平方数

LeetCode 279. 完全平方数

作者: 草莓桃子酪酪 | 来源:发表于2022-08-04 01:42 被阅读0次
题目

给你一个整数 n ,返回和为 n 的完全平方数的最少数量。完全平方数是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。

例:
输入:n = 12
输出:3
解释:12 = 4 + 4 + 4

方法:动态规划

本题为完全背包,因为完全平方数是无限的。思路类似 322. 零钱兑换

  • dp[j] 表示和为 j 的完全平方数的最少数量,初始化为正无穷,因为求的是最少数量,若非大于和 n 的值,则可能导致该值被覆盖
  • 当整数为零时,完全平方数的最少数量为零,即 dp[0] = 0
  • nums 表示小于等于 n 的所有完全平方数的列表
  • 外部循环为对完全平方数(物品)的正序循环,内部循环为对和 n 的正序循环
  • 递推公式:该次 dp[j] 的最少数量表示为,原 dp[j] 的值和新值(即在加入完全平方数 num 后和达到 j)进行比较后较小的那个
class Solution(object):
    def numSquares(self, n):
        dp = [float('INF')] * (n + 1)
        dp[0] = 0
        nums = []
        for i in range(1, n+1):
            if i**2 <= n:
                nums.append(i**2)
        for num in nums:
            for j in range(num, n + 1):
                dp[j] = min(dp[j], dp[j-num] + 1)
        return dp[n]
参考

代码相关:https://programmercarl.com/0279.%E5%AE%8C%E5%85%A8%E5%B9%B3%E6%96%B9%E6%95%B0.html

相关文章

  • leetcode 279. 完全平方数

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和...

  • LeetCode 279. 完全平方数

    题目 给你一个整数 n ,返回和为 n 的完全平方数的最少数量。完全平方数是一个整数,其值等于另一个整数的平方;换...

  • 279. 完全平方数

    题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需...

  • 279. 完全平方数

    279. 完全平方数 1.思路 1.1动态规划: 这个题很容易就想到了动态规划.每次F[n]=min{F[i]+F...

  • 279. 完全平方数

    思路:才用广度优先搜索每次把 减去平方数的差值 和 搜索深度 入队遍历,第一次找到差值0时,对应的搜索深度即所求。...

  • 279. 完全平方数

    好久没有刷题了,还是要坚持和继续的,刷题是我快乐! 这个的思路就是一层一层的进行,在第一层用所有小于n的平方数去被...

  • 279. 完全平方数

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和...

  • 279. 完全平方数

    https://leetcode-cn.com/problems/perfect-squares/给定正整数 n,...

  • 279. 完全平方数

    直接转化为换零钱问题 我的代码的效率不是最高的, 但是可读性很好.

  • 279. 完全平方数

    解法

网友评论

      本文标题:LeetCode 279. 完全平方数

      本文链接:https://www.haomeiwen.com/subject/tlqwbrtx.html