给你一个整数 n
,返回 和为 n
的完全平方数的最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1
、4
、9
和 16
都是完全平方数,而 3
和 11
不是。
示例 1:
输入:n =12
输出:3 解释:12 = 4 + 4 + 4
示例 2:
输入:n =13
输出:2 解释:13 = 4 + 9
提示:
1 <= n <= 104
int numSquares(int n) {
int a = sqrt (n);
if((a+1)*(a+1) <n)
{
a++;
}
vector<long> vec(n+4,INT_MAX);
for(int i=1;i<=a;i++)
{
vec[i*i]=1;
}
vec[1]=1;
vec[2]=2;
vec[3]=3;
if(n<=3)
{
return vec[n];
}
for(int i=4;i<=n;i++)
{
if(vec[i]==1)
{
continue;
}
for(int j=i-1;j>=i/2;j--)
{
long tmp = (long)vec[j] + (long)vec[i-j];
if(tmp <vec[i])
{
vec[i]=tmp;
}
}
}
return vec[n];
}