给你一个整数 n
,返回 和为 n
的完全平方数的最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1
、4
、9
和 16
都是完全平方数,而 3
和 11
不是。
示例 1:
输入:n =12
输出:3 解释:12 = 4 + 4 + 4
示例 2:
输入:n =13
输出:2 解释:13 = 4 + 9
这道题我没有思路,看了官方解题思路之后,自己理解如下:
用一个数组f[i]表示数字i 完全平方数最少数量,初始化f[0]=0;f[1]=1;
那么如果这个数本身是完全平方数,那就直接f[i]=1;否则可以表示成f[i-j*j]+1; j是一个小于根号下i的完全平方数
class Solution {public int numSquares(int n) {int f[]=new int[n+1];f[1]=1;f[0]=0;for(int i=2;i<=n;i++){int m=(int)Math.sqrt(i);if(m*m==i){f[i]=1;continue;}int min=Integer.MAX_VALUE;for(int j=1;j*j<i;j++){min=Math.min(min,1+f[i-j*j]);}f[i]=min;}return f[n];}
}