【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];
    }
};
posted @ 2022-03-01 13:21  fwx  阅读(28)  评论(0)    收藏  举报