您的位置:首页 > Web前端

LeetCode - 279 - Perfect Squares

2017-08-01 18:32 507 查看
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
.

给你一个数,问最少能用多少个完全平方数组成。最少。

动态规划美滋滋啊。

dp[0] = 0
dp[1] = dp[0]+1 = 1
dp[2] = dp[1]+1 = 2
dp[3] = dp[2]+1 = 3
dp[4] = Min{ dp[4-1*1]+1, dp[4-2*2]+1 }
= Min{ dp[3]+1, dp[0]+1 }
= 1
dp[5] = Min{ dp[5-1*1]+1, dp[5-2*2]+1 }
= Min{ dp[4]+1, dp[1]+1 }
= 2

所以,dp
= min{ dp[n - i * i] + 1 }, n - i * i >= 0 && i >= 1

class Solution {
public:
int numSquares(int n) {
if (n <= 0) return 0;
vector<int> dp(n+1, INT_MAX);
dp[0] = 0;
for (int i = 0; i <= n; ++i) {
for (int j = 1; j * j <= i; ++j)
dp[i] = min(dp[i], dp[i - j*j] + 1);
}
return dp
;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: