给定正整数 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=;
queue<int>qq;
vector<int>visited(n+);
qq.push(n);
visited[n]=true;
while(!qq.empty())
{
int size_=qq.size();
step++;
for(int j=;j<size_;j++)
{
int num=qq.front();
qq.pop();
for(int i=;i<=static_cast<int>(sqrt(num));i++)
{
int temp=num-i*i;
if(temp==) return step;
else if(!visited[temp])
{
qq.push(temp);
visited[temp]=true;
}
} } }
return -;
}
};

leetcode279. 完全平方数的更多相关文章

  1. [Swift]LeetCode279. 完全平方数 | Perfect Squares

    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...

  2. 图解leetcode279 —— 完全平方数

    每道题附带动态示意图,提供java.python两种语言答案,力求提供leetcode最优解. 描述: 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于  ...

  3. leetcode探索高级算法

    C++版 数组和字符串 正文 链表: 正文 树与图: 树: leetcode236. 二叉树的最近公共祖先 递归(先序) leetcode124二叉树最大路径和 递归 图: leetcode 547朋 ...

  4. Leetcode279. Perfect Squares完全平方数

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示例 1: 输入: n = 12 输出: 3 解释: 12 ...

  5. BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3028  Solved: 1460[Submit][Sta ...

  6. [LeetCode] Valid Perfect Square 检验完全平方数

    Given a positive integer num, write a function which returns True if num is a perfect square else Fa ...

  7. [LeetCode] Perfect Squares 完全平方数

    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...

  8. NOIP提高模拟题 完全平方数

    完全平方数 (number.***(c/cpp/pas),1000ms,128mb) [问题描述] 一个数如果是另一个整数的完全平方,那么我们就称这个数为完全平方数(Pefect Sqaure),也称 ...

  9. 完全平方数(钟神的hao)

    [问题描述] 从1− ?中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字?. [输出格式] 一行一个整数代表答案对100000007取模之后的答 ...

随机推荐

  1. Web-[RoarCTF 2019]Easy Calc

    看看题目内容,一个计算器,并且过滤了非数字的值,查看源码,上了waf,并且在calc.php显示waf的规则 <?php error_reporting(0); if(!isset($_GET[ ...

  2. P4728 [HNOI2009]双递增序列

    题意 这个DP状态有点神. 首先考虑一个最暴力的状态:\(f_{i,j,k,u}\)表示第一个选了\(i\)个,第二个选了\(j\)个,第一个结尾为\(k\),第二个结尾为\(u\)是否可行. 现在考 ...

  3. models.py相关API

    models.py import datetime from django.db import models from django.utils import timezone class Quest ...

  4. H5双重标题的适配

    在QQ和微信中会自代一个标题栏,而手机浏览器没有标题栏. 因此,我自己写了一个标题栏 <div class="headbar"> <center class=&q ...

  5. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 9

    23.5.3  WebAPI框架应用 程序框架其实就是一个半成品项目,在应用框架时,核心的服务程序只应用,不需要改动.当然如果有必要,也可以根据项目的需要对框架进行二次开发.本节内容主要基于我们的框架 ...

  6. 07-selenium、PhantomJS(无头浏览器)

    selenium(自动化测试工具可用于在爬虫中解决js动态加载问题) 简介(本质就是模仿浏览器工作) Selenium 是什么?一句话,自动化测试工具.它支持各种浏览器,包括 Chrome,Safar ...

  7. Web前端——css

    css 推荐的样式编写顺序: Positioning:定位 Box model:盒子模型.大小等 Typographic:文字系列.排印等 Visual:可视化.背景等 Misc:其它混杂模式 居中 ...

  8. 盲法介绍及python盲打练习系统

    目录 一:盲打简介与优点 二:如何练习 三:键盘字母排列顺序的口诀 四:python打字练习系统 一:盲打简介与优点   简介:盲打是指打字的时候不用看键盘或看稿打字时的视线不用来回于文稿和键盘之间的 ...

  9. Dynamics CRM 2015/2016新特性之三十三:有了ExecuteTransactionRequest,再也不用担心部分成功部分失败了

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复216或者20160329可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  10. 【转载】Gradle for Android 第五篇( 多模块构建 )

    Android studio不仅允许你为你的app和依赖库创建模块,同时也可为Android wear,Android TV,Google App Engine等创建模块,而这些单独的模块又可以在一个 ...