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

示例 1:

输入: n = 12

输出: 3

解释: 12 = 4 + 4 + 4.

示例 2:

输入: n = 13

输出: 2

解释: 13 = 4 + 9.

思路:构建一个图,再进行广度优先遍历(BFS),注意三个要点

1. 使用队列

2. 用数组表示图的节点[ num, step],num表示当前数字是什么,step表示经过几步可到达该节点

3. 用一个数组记录已经访问过的节点,避免在队列中插入同样的值

例如:n = 9时,先向队列中存入[9, 0],再存入[8, 1],再存入[5, 1],再存入[0, 3],......,最后得结果为3

借用一张bobobo老师的图

class Solution:

def numSquares(self, n: int) -> int:

# 图的广度优先遍历

import queue

q = queue.Queue()

q.put([n, 0]) # 队列存储数字,第一个数为当前数字,第二个数为走过的步数

visited = [0 for _ in range(n + 1)] # 记录0到n哪个数字被访问过

visited[n] = 1

while not q.empty():

temp = q.get()

num = temp[0]

step = temp[1]

if num == 0:

return step

i = 1

while True:

a = num - i * i

if a < 0:

break

if visited[a] == 0:

q.put([a , step + 1])

visited[a] = 1

i = i + 1

本文同步分享在 博客“小王曾是少年”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

python输出完全平方数_LeetCode 279*. 完全平方数(Python)相关推荐

  1. python输出列表元素_在Python中分别打印列表中的每一个元素方法

    在Python中分别打印列表中的每一个元素方法 更新时间:2018年11月07日 15:12:03 作者:wintersshi 今天小编就为大家分享一篇在Python中分别打印列表中的每一个元素方法, ...

  2. python输出玫瑰花_如何用python画玫瑰花

    源码如下:import turtle # 设置初始位置 turtle.penup() turtle.left(90) turtle.fd(200) turtle.pendown() turtle.ri ...

  3. python 输出文件分隔符_使用Python文件读写,自定义分隔符的方法

    使用Python文件读写,自定义分隔符的方法 发布时间:2020-07-06 11:07:56 来源:亿速云 阅读:121 作者:清晨 小编给大家分享一下使用Python文件读写,自定义分隔符的方法, ...

  4. python输出数据到excel-使用python将大量数据导出到Excel中的小技巧分享

    (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以 ...

  5. python输出布尔值true_关于python中bool类型的重要细节

    原标题:关于python中bool类型的重要细节 0. 导读 大家好,欢迎来到 Crossin的编程教室 ! 布尔类型是Python中必不可少的一种数据类型.它看起来很简单,仅包括True和False ...

  6. python输出的格式_将Python输出格式化为行

    所以,我对编程还是有点陌生,我正在尝试用Python格式化一些数组的输出.我发现很难在格式化的某些方面绞尽脑汁. 我有几个数组要以表的格式打印.在headings = ["Name" ...

  7. python输出偶数_如何用python判断奇偶数

    问题分析:用Python编写一个程序,判断输入的数字是奇数还是偶数,并相应的输出信息,要判断一个数为奇数还是偶数,依据的是它被2除后的余数.因此可以用"%"运算符来计算并判断. 代 ...

  8. python实现平衡二叉树_LeetCode 110. 平衡二叉树 | Python

    # 110. 平衡二叉树 --- 题目来源:力扣(LeetCode)[https://leetcode-cn.com/problems/balanced-binary-tree](https://le ...

  9. python输出质数序列_用python打印素数序列

    您需要检查从2到n-1(实际上是sqrt(n))的所有数字,但是好的,让它为n). 如果n可被任何数字整除,则它不是素数.如果一个数字是素数,就打印出来.for num in range(2,101) ...

最新文章

  1. Java基础学习总结(1)——equals方法
  2. python pandas写入数据后保存_python读取MySQL数据使用pandas写入到csv,并保存列名
  3. 浮点类型和布尔类型(Java)
  4. 张钹院士:可解释、可理解是人工智能研究的主攻方向 | CCF-GAIR 2018
  5. java web面试题大全_Java经典面试题之Java web开发汇总(附答案)
  6. armbian nginx 部署博客_从零开始搭建服务器之更加优雅地部署项目
  7. Java 基本功之(二)Java 面向对象
  8. [kubernetes] 解决k8s.gcr.io Image 导入导出 等问题
  9. SimpleDateFormat解析的时候字符串过长问题
  10. 通过curl获取网页访问时间
  11. mysql降序后去重_Mysql 数据记录去重后按字段排序
  12. 把杀某程序封装成sh
  13. clipboard.js在弹出框中无法复制的问题
  14. 五步整理你的css文件
  15. 《Yii2 By Example》第2章:创建一个简单的新闻阅读器
  16. 【算法设计与分析】01 算法涉及的研究内容概述
  17. html页面常见布局
  18. showtext matlab,使用MATLAB 2019 App Design 工具设计一个 电子日记App
  19. Splay 总结基础精华
  20. CLI、CLR、CTS、CLS

热门文章

  1. Android传感器之光线传感器介绍
  2. java 实现站内信_群发站内信实现
  3. 平台交叉打包 GYP
  4. pythonista模板_Python——Code Like a Pythonista: Idiomatic Python
  5. android然后让list刷新到底部,Android笔记之:App列表之下拉刷新的使用
  6. 电脑 蓝屏报错:SYSTMEM SCAN AT RAISED IRQL CAUGHT IMPROPER DRIVER UNLOAD
  7. IE代理服务器没有响应 浏览器无法打开网页解决方法(浏览器无法打开网页但是可以使用其他软件)
  8. MERGE JOIN CARTESIAN
  9. mixpanel实验教程(1) 支持
  10. qcom 音频相关的dsp driver笔记(基于msm8996平台)