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;
        }
    };
  • 相关阅读:
    Elastic Stack之FileBeat使用实战
    Elastic Stack之Logstash进阶
    Elastic Stack之Logstash
    Elastic Stack之Elasticsearch 5.6.12 集群部署实战
    CentOS安装操作系统级初始优化
    Elastic Stack之搜索引擎基础
    ansible基础-ansible角色的使用
    ansible基础-playbook剧本的使用
    ansible基础-ansible的安装和常用模块介绍
    运维开发笔记整理-使用序列化
  • 原文地址:https://www.cnblogs.com/renzmin/p/11914835.html
Copyright © 2011-2022 走看看