279. 完全平方数

2019-08-10  本文已影响0人  HamletSunS

思路:
才用广度优先搜索
每次把 减去平方数的差值 和 搜索深度 入队
遍历,第一次找到差值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;
    }
};
上一篇下一篇

猜你喜欢

热点阅读