zoukankan      html  css  js  c++  java
  • leetcode279. 完全平方数

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

    示例 1:

    输入: n = 12
    输出: 3
    解释: 12 = 4 + 4 + 4.
    示例 2:

    输入: n = 13
    输出: 2
    解释: 13 = 4 + 9.

    路径最短的问题 使用BFS最优

    BFS其实是很简单的算法,只需要掌握以下几个套路

    1.BFS算法组成的三要素:队列、入队及出队的结点、已经访问的标记集合

      队列:先入先出的容器

      入队、出队的结点

      已访问标记集合:避免队列插入重复的值

    2.BFS算法组成的格式

      (1)初始化元素

           queue<int>qq;
           vector<int>visited(n+1);
      (2)操作队列---弹出队首节点
           int num=qq.front();
           qq.pop();
    ····(3)操作弹出的节点 —— 根据业务生成子节点(一个或多个):
           for(int i=1;i<=static_cast<int>(sqrt(num));i++)
               int temp=num-i*i;
       (4)判断这些节点 —— 符合业务条件,则return,不符合业务条件,且不在已访问集合,则追加到队尾,并加入已访问集合:
        
               if(temp==0) return step;
               else if(!visited[temp])
               {
                  qq.push(temp);
                  visited[temp]=true;
                }

                    (5)若以上遍历完成仍未return,下面操作返回未找到代码:return -1;

    class Solution{
    public:
        int numSquares(int n)
        {
           int step=0;
           queue<int>qq;
           vector<int>visited(n+1);
           qq.push(n);
           visited[n]=true;
           while(!qq.empty())
           {
               int size_=qq.size();
               step++;
               for(int j=0;j<size_;j++)
               {
                   int num=qq.front();
                   qq.pop();
                   for(int i=1;i<=static_cast<int>(sqrt(num));i++)
                   {
                       int temp=num-i*i;
                       if(temp==0) return step;
                       else if(!visited[temp])
                       {
                           qq.push(temp);
                           visited[temp]=true;
                       }
                   }
                   
               }
               
           }
           return -1;
        }
    };
  • 相关阅读:
    bzoj 4012: [HNOI2015]开店
    POJ 1054 The Troublesome Frog
    POJ 3171 Cleaning Shifts
    POJ 3411 Paid Roads
    POJ 3045 Cow Acrobats
    POJ 1742 Coins
    POJ 3181 Dollar Dayz
    POJ 3040 Allowance
    POJ 3666 Making the Grade
    洛谷 P3657 [USACO17FEB]Why Did the Cow Cross the Road II P
  • 原文地址:https://www.cnblogs.com/renzmin/p/11914835.html
Copyright © 2011-2022 走看看