LeetCode-279. 完全平方数

279. 完全平方数


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

示例 1:

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

示例 2:

输入: n = 13
输出: 2
解释: 13 = 4 + 9.

解题思路:使用动态规划算法求解。令dp[i]表示当前组成正整数i的完全平方数的最少个数,那么有dp[k**2+j] = min(dp[k**2+j],dp[j]+1)。即只要求解出dp[k**2]+dp[i-k**2] = 1 + dp[j]在k从1不断增大时的最小值即可。

Python3代码如下:

class Solution(object):
    def numSquares(self, n):
        """
        :type n: int
        :rtype: int
        """
        dp = [float('inf')]*(n+1)
        i = 1
        while i**2 <= n:
            dp[i**2] = 1
            i += 1
        for j in range(1,n):
            k = 1
            while k**2+j <= n:
                dp[k**2+j] = min(dp[k**2+j],dp[j]+1)
                k += 1
        return dp[-1]

LeetCode-279. 完全平方数

上一篇:leetcode 279


下一篇:git credentials