【BFS(隐晦的dijskra)】279. 完全平方数
和路径权重的最短路径有些类似,可以用相同的方式做。
class Solution {
public:
int numSquares(int n) {
queue<int> n_q;
int dp[n+1];
bool is_go[n+1];
for(int i=1;i<=n;++i) {
dp[i] = -1;
is_go[i] = false;
}
dp[0] = 0;
int max_n = sqrt(n);
n_q.push(0);
is_go[0] = true;
while(!n_q.empty()){
int cur_num = n_q.front();
n_q.pop();
for(int i=1;i<=max_n;++i){
int target_num = cur_num + i*i;
if(target_num > n)
break;
if(dp[target_num] == -1)
dp[target_num] = dp[cur_num] + 1;
else
dp[target_num] = min(dp[cur_num] + 1, dp[target_num]);
// cout << target_num << " " << dp[target_num] << endl;
if(!is_go[target_num]){
is_go[target_num] = true;
n_q.push(target_num);
}
}
}
return dp[n];
}
};

浙公网安备 33010602011771号