279. Perfect Squares
Given a positive integern, find the least number of perfect square numbers (for example,1, 4, 9, 16, ...
) which sum ton.
For example, givenn=12
, return3
because12 = 4 + 4 + 4
; givenn=13
, return2
because13 = 4 + 9
.
S: DP O(n)
dp[i]表示n = i时需要的最少的perfect square数.
dp[i] = min(dp[i -1] + 1, dp[i - 4] + 1, dp[i - 9] + 1, .. dp[i - j*j] + 1)
int numSquares(int n) {
if (n < 4) return n;
vector<int> dp(n + 1, INT_MAX);
dp[0] = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j * j <= i; ++j) {
dp[i] = min(dp[i], dp[i - j * j] + 1);
}
}
return dp[n];
}