您的位置:首页 > 其它

完美平方-LintCode

2017-10-30 18:59 288 查看
给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, … )使得他们的和等于 n。你需要让平方数的个数最少。

样例:

给出 n = 12, 返回 3 因为 12 = 4 + 4 + 4。

给出 n = 13, 返回 2 因为 13 = 4 + 9。

思路:

动态规划,状态转换方程为:

若i是完全平方数

dp[i]=1

其他

dp[i]=min(dp[j]+dp[i−j],dp[i])

#ifndef C513_H
#define C513_H
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
/*
* @param n: a positive integer
* @return: An integer
*/
int numSquares(int n) {
// write your code here
if (n <= 0)
return 0;
vector<int> dp(n + 1, INT_MAX);
dp[1] = 1;
for (int i = 1; i <= n; ++i)
{
int sqr = (int)sqrt(i);
if (sqr*sqr == i)
dp[i] = 1;
else
{
for (int j = 1; j <= i / 2; ++j)
dp[i] = minVal(dp[j] + dp[i - j], dp[i]);
}
}
return dp
;
}
int minVal(int a, int b)
{
return a < b ? a : b;
}
};
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: