平方根有1,4,9,16...
给定一个数n,一定可以找到有多少个平方跟组成。因为有1这个平方根。
定一个数n,现在寻找给最少的平方根
class Solution {
public int numSquares(int n) {
int[] dp = new int[n+1];
Arrays.fill(dp,Integer.MAX_VALUE);
dp[0] = 0;
for(int i=1;i<=n;i++){
int j=1;
while(i - j*j >= 0){
dp[i] = Math.min(dp[i],dp[i - j*j] + 1);
j++;
}
}
return dp[n];
}
}
求的是n的最少平方根个数。
错误思路:
求出小于n的最大的平方数,剩下的n-square,按照上述继续计算。
当n=12时,13-9=3.剩下的3由3个1组成。一共4个数9+1+1+1=4个数
动态规划正确思路:
求的是n的最少平方根,我们可以依次求出1到n的最少平方根。