- 完全平方数
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
示例 1:
输入: n = 12
输出: 3
解释: 12 = 4 + 4 + 4.
示例 2:
输入: n = 13
输出: 2
解释: 13 = 4 + 9.
class Solution {
vector<int>get(int n){
vector<int>res;
for(int i=1;i<=n;i++){
res.push_back(i*i);
}
return res;
}
public:
int numSquares(int n) {
vector<bool>vis(n+1);
vector<int>p=get(n);
queue<int>q;
q.push(n);
vis[n]=1;
int res=0;
while(!q.empty()){
int s=q.size();
res++;
while(s--){
int cur=q.front();
q.pop();
for(int i:p){
int next=cur-i;
if(next<0){
break;
}
if(next==0){
return res;
}
if(vis[next])continue;
vis[next]=1;
q.push(next);
}
}
}
return n;
}
};