279. 完全平方数
动态规划:
java
class Solution {
public int numSquares(int n) {
//子问题:从前i个完全平方数中选刚好满足n的最少次数,这里的平方数可以重复选
//子问题的解法:dp[n] = min(dp[n],dp[n-i²]+1)
//前提是n>=i²
//顺序:自下到上
int[] dp = new int[n+1];
//一定要初始化,dp初始值都为0,所以要填充
Arrays.fill(dp,100000);
dp[0] = 0;
for(int i = 1;i*i<=n;i++){
int squ = i*i;
for(int sum = squ;sum<=n;sum++){
dp[sum] = Math.min(dp[sum],dp[sum-squ]+1);
}
}
return dp[n];
}
}
时间复杂度:O(N・√N),N是n
空间复杂度:O(N)