这种最快凑数的,都是bfs。。。之前做过一道题,没反应过来。。。
struct Node{
int val;
int step;
};
class Solution {
public:
int numSquares(int n) {
int max_sqrt=sqrt(n);
Node node;
node.val=n;
node.step=0;
queue<Node> q;
q.push(node);
unordered_set<int> visited;
while(!q.empty()){
Node node=q.front();
q.pop();
if(node.val<0)
continue;
if(node.val==0)
return node.step;
if(visited.count(node.val)!=0)
continue;
visited.insert(node.val);
Node new_node;
new_node.step=node.step+1;
for(int i=1;i<=max_sqrt;i++){
new_node.val=node.val-i*i;
q.push(new_node);
}
}
return 0;
}
};
class Solution {
public:
int numSquares(int n) {
int max_sqrt=sqrt(n);
int dp[n+1];
memset(dp,0x3f,sizeof(dp));
dp[0]=0;
for(int i=0;i<n;i++){
for(int j=1;j<=max_sqrt;j++){
if(i+j*j>n)
break;
dp[i+j*j]=min(dp[i+j*j],dp[i]+1);
}
}
return dp[n];
}
};