原题
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
, return3
because12 = 4 + 4 + 4
; given n =13
, return2
because13 = 4 + 9
.
思路
完整代码
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]