原题地址:https://leetcode-cn.com/problems/perfect-squares/
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。
思路:BFS
class Solution {
public:
int numSquares(int n) {
unordered_set<int> visited;
queue<int> que;
int max_k= int(sqrt(n));;
que.push(0);
int step = 0;
while (!que.empty()) {
for(int i=que.size();i>0;i--){
int cur = que.front();
que.pop();
if(cur==n) return step;
if(!visited.count(cur)){
visited.emplace(cur);
for(int j=1;cur+j*j<=n&&j<=max_k;j++){
int a = cur+j*j;
que.push(a);
}
}
}
step++;
}
return 0;
}
}
青古の每篇一歌
《红韶愿》
重寄一段过往
将希冀都流放