LeetCode 279. Perfect Squares

原题

Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.

For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.

 

思路

类似于LeetCode 322题

 

完整代码

class Solution(object):
    def numSquares(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n < 1:
            return 0
        square_num = []
        for i in xrange(1, sys.maxint):
            if i*i <= n:
                square_num.append(i*i)
            else:
                break
        dp = [sys.maxint] * (n + 1)
        dp[0] = 0
        for i in xrange(1, n+1):
            for j in xrange(len(square_num)):
                if (i >= square_num[j]):
                    dp[i] = min(dp[i], dp[i - square_num[j]] + 1)
        return dp[n]

  

posted @ 2017-04-11 17:21  小丑进场  阅读(146)  评论(0编辑  收藏  举报