前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图解LeetCode第 279 号问题: 完全平方数

图解LeetCode第 279 号问题: 完全平方数

作者头像
五分钟学算法
发布2019-09-03 18:06:43
6160
发布2019-09-03 18:06:43
举报
文章被收录于专栏:五分钟学算法五分钟学算法
总第63篇/程序员小吴

LeetCode上第 279 号问题:Perfect Squares

题目描述

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

示例 1:

输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4

示例 2:

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

思路解析

使用广度优先搜索方法,将 n 依次减去比 n 小的所有平方数,直至 n = 0 ,此时的层数即为最后的结果。

动画演示

动画演示 Made by 王琛

参考代码

代码语言:javascript
复制
/// @五分钟学算法
class Solution(object):
    def numSquares(self, n):
        Q = collections.deque([n])
        visited, level = set(), 0
        while Q:
            # 按层处理
            for i in range(len(Q)):
                n = Q.popleft()
                # 若n==0,则返回当前层数
                if n == 0: return level
                # 依次减去所有比n小的平方数
                for i in range(1,int(n**0.5)+1):
                    val = n - i**2
                    if val in visited: continue
                    Q.append(val)
                    visited.add(val)
            level = level + 1

代码截图

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 五分钟学算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总第63篇/程序员小吴
  • 题目描述
    • 示例 1:
      • 示例 2:
      • 思路解析
      • 动画演示
      • 参考代码
      • 代码截图
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档