LeetCode-279-完全平方数

image.png

解题思路

  1. 正整数n可以看做n = a*a+B,继而B=b*b+C,以此类推;
  2. n的平方数个数的最优解dp[n] = 1 + dp[n'],且n'小于n,n'的变化范围[1, n-1];
  3. 对于每一个n,找到1到n-1中,谁的解最小,那么n的解就是它+1;
  4. 1到n-1之间的数为i-j*j。

Python3代码

class Solution:
    def numSquares(self, n: int) -> int:
        dp = [int(1e9) for i in range(n+1)]
        dp[0] = 0
        for i in range(1, n+1):
            j = 1
            while j*j <= i:
                dp[i] = min(dp[i], dp[i-j*j]+1)
                j+=1
        return dp[n]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。