美文网首页
279. 完全平方数

279. 完全平方数

作者: HamletSunS | 来源:发表于2019-08-10 15:01 被阅读0次

    思路:
    才用广度优先搜索
    每次把 减去平方数的差值 和 搜索深度 入队
    遍历,第一次找到差值0时,对应的搜索深度即所求。
    提高:
    要避免重复访问,如果之前已经访问过了某个num(差值),就没必要再次访问num了(应为已经通过更少的数字个数减小到了这个数字了)
    总结:
    广度优先搜索的模板要记牢。
    根节点入队
    while 队列非空
    取出队首
    对队首元素进行操作判断,是否返回ret
    不返回ret,下一层节点入队(一般通过for循环)
    如果要避免重复,需要在for循环中进行条件判断,看
    是否入队,并标记
    可选 更新标记变量。
    return fail

    代码:

    class Solution {
    public:
        int numSquares(int n) {
            vector<bool> visited(n,false);
            queue<pair<int,int>> qu;
            qu.push(make_pair(n,0));
            
            while(!qu.empty()){
                int num=qu.front().first;
                int count=qu.front().second;
                qu.pop();
                if(num==0)
                    return count;
                for(int i=1;i*i<=num;++i){
                    int temp=num-i*i;
                    if(visited[temp]==false){
                        visited[temp]=true;
                        qu.push(make_pair(temp,count+1));
                    }
                }
            }
            
            return -1;
        }
    };
    

    相关文章

      网友评论

          本文标题:279. 完全平方数

          本文链接:https://www.haomeiwen.com/subject/byjrjctx.html