首页 > 其他 > 详细

搜索(BFS)---完美平方数

时间:2019-06-30 15:03:59      阅读:103      评论:0      收藏:0      [点我收藏+]

完美平方数

279. Perfect Squares (Medium)

For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.

题目描述:

??给出一个正整数,求出它最少可以由几个平方数组成。

思路分析:

??可以将每个整数看成图中的一个节点,如果两个整数之差为一个平方数,那么这两个整数所在的节点就有一条边。

要求解最小的平方数数量,就是求解从节点 n 到节点 0 的最短路径。

代码:

public int numSquares(int n){
    List<Integer>squares=generate(n); //生成n以内的所有平方数
    Queue<Integer>q=new LinkedList<>();
    int res=0;
    q.offer(n);
    boolean[]flag=new boolean[n+1];
    flag[n]=true;
    while(!q.isEmpty()){
        int size=q.size();
        res++; //每循环一次个数就加一
        while(size-->0){
            int cur=q.poll();
            for(int s:squares){ //到下一个点的途径
                int next=cur-s;
                if(next<0)
                    break;
                if(next==0)
                    return res;
                if(flag[next]==true)//已经访问过的点
                    continue;
                flag[next]=true;
                q.offer(next);
            }
        }
    }
    return n;
}
public List<Integer>generate(int n){//生成平方数
    List<Integer>squares=new ArrayList<>();
    int square=1;
    int diff=3;
    while(square<=n){
        squares.add(square);
        square+=diff;
        diff+=2;
    }
    return squares;
}

搜索(BFS)---完美平方数

原文:https://www.cnblogs.com/yjxyy/p/11109571.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!