【热题】279. 完全平方数(待补充数学方法)

643 篇文章 5 订阅

题目
给你一个整数 n ,返回 和为 n 的完全平方数的最少数量
【代码】
【方法1】动态规划
执行用时:4772 ms, 在所有 Python3 提交中击败了27.66% 的用户
内存消耗:14.9 MB, 在所有 Python3 提交中击败了93.21% 的用户
通过测试用例:588 / 588

class Solution:
    def numSquares(self, n: int) -> int:
        ans=0
        sq=[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401, 2500, 2601, 2704, 2809, 2916, 3025, 3136, 3249, 3364, 3481, 3600, 3721, 3844, 3969, 4096, 4225, 4356, 4489, 4624, 4761, 4900, 5041, 5184, 5329, 5476, 5625, 5776, 5929, 6084, 6241, 6400, 6561, 6724, 6889, 7056, 7225, 7396, 7569, 7744, 7921, 8100, 8281, 8464, 8649, 8836, 9025, 9216, 9409, 9604, 9801, 10000]
        if n in sq:
            return 1
        dp=[n]*(n+1)
        dp[1]=1
        for i in range(1,n+1):
            if i in sq:
                dp[i]=1
                continue
            for item in sq:
                if i-item>=0:
                    dp[i]=min(dp[i],dp[i-item]+1)
                else:
                    break
        return dp[n]

【方法2】动态规划
执行用时:5412 ms, 在所有 Python3 提交中击败了16.46% 的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了74.35% 的用户
通过测试用例:588 / 588

class Solution:
    def numSquares(self, n: int) -> int:
        dp=[n]*(n+1)
        dp[1]=1
        for i in range(1,n+1):
            if i==(floor(sqrt(i)))**2:
                dp[i]=1
                continue
            for j in range(1,floor(sqrt(i))+1):
                if i-j*j>=0:
                    dp[i]=min(dp[i],dp[i-j*j]+1)
                else:
                    break                
        return dp[n]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值