您的位置:首页 > Web前端

LeetCode Perfect Squares DP

2015-11-16 22:19 393 查看
思路:

DP。

dp[i]
表示当
n
等于
i
时需要的最少的平方个数,i可以表示成 a + b * b,那么就可以建立递推方程:

dp[a + b * b] = min(dp[a] + 1, dp[a + b * b]);


时间复杂度O(N^2) ,空间复杂度 O(N)。

java code:

public class Solution {
public int numSquares(int n) {
int[] dp = new int[n + 1];
//init dp
Arrays.fill(dp, Integer.MAX_VALUE);
for(int i = 0; i * i <= n; ++i) {
dp[i * i] = 1;
}
//construct dp
for(int a = 0; a <= n; ++a) {
for(int b = 0; a + b * b <= n; ++b) {
dp[a + b * b] = Math.min(dp[a] + 1, dp[a + b * b]);
}
}
return dp
;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: