Type: Medium, BFS

完美平方数

题目描述:

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

Example 1:

Input: n = 12
Output: 3
Explanation: 12 = 4 + 4 + 4.

Example 2:

Input: n = 13
Output: 2
Explanation: 13 = 4 + 9.

这里还牵涉到一个理论是:四平方和定理。

每个正整数均可表示为4个整数的平方和。

所以,本题的答案只在1,2,3,4这四个里面了。

去验证下:

139 / 588 test cases passed.

这个能过139个测试样例的写法是:

import random
class Solution:def numSquares(self, n):""":type n: int:rtype: int"""return random.randint(1,4)

随机1,2,3,4.

再测试只随机输出1,2,3,结果:

160 / 588 test cases passed.

还有提高哈。

严肃说明:这不是解题的正确态度,只是探索一下。

实际上,结合一个推论:

满足四数平方和定理的数n(这里要满足由四个数构成,小于四个不行),必定满足 n=4a(8b+7)n=4^a(8b+7)n=4a(8b+7)

可以知道,是四个整数组成的,比较特殊。

import random
class Solution:def numSquares(self, n):""":type n: int:rtype: int"""# 根据推论,降低问题规模:4^a(8b + 7)while n % 4 == 0:n /= 4if n % 8 == 7:return 4a = 0while a ** 2 <= n:b = int((n - a ** 2) ** 0.5)if a ** 2 + b ** 2 == n:return (not not a) + (not not b)a += 1return 3

根据推论,4本身是平方数,所以可以不断除以4,得到的8b + 7假定是a2+b2a^2 + b^2a2+b2,带上4可以看成是(2a)2+2(b)2(2a)^2 + 2(b)^2(2a)2+2(b)2。

缩减到只剩下8b+7后,就可以进行判断是否满足推论,否则开始暴力搜索,满足两个完全平方数的 ,则输出2,否则就是3.

DP解法

import random
class Solution:def numSquares(self, n):""":type n: int:rtype: int"""# dp解法dp = [1e31] * (n + 1)a = int(n ** 0.5)for i in range(a + 1):dp[i * i] = 1for i in range(1,n + 1):b = int((n - i) ** 0.5) + 1for j in range(1,b):dp[i + j * j] = min(dp[i] + 1, dp[i + j * j])return dp[n]

参考链接:https://blog.csdn.net/happyaaaaaaaaaaa/article/details/51584790

END.

Leetcode 279 完美平方数相关推荐

  1. 279 Perfect Squares 完美平方数

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...) 使得他们的和等于 n.你需要让平方数的个数最少. 比如 n = 12,返回 3 ,因为 12 = 4 + 4 + 4 : ...

  2. leetcode 279 四平方定理

    可以用四平方和定理:任意一个正整数都可以表示为4个以内整数的平方和. 如果一个数含有因子4,那么我们可以把4都去掉,并不影响结果.比如:8去掉4,12去掉3,返回的结果都相同. 如果一个数除以8余7, ...

  3. python实现计算最少完美平方数

    目录 1.题目描述 2.代码实现 3.运行结果 1.题目描述 给一个正整数 n, 请问最少多少个完全平方数(比如1, 4, 9 ... )的和等于 n. 输入样例①:12 输出样例:3 解释:4+4+ ...

  4. 四平方数和定理(leetcode 279 python)

    四平方数定理:(theorem on the sum of foursquares)亦称拉格朗日四平方数和定理.四平方数和问题是著名的数论问题.由拉格朗日(La-grange, J.-L.)最终解决, ...

  5. 279. 完全平方数 (数学定理 四平方数之和定理)

    LeetCode: 279. 完全平方数 这道题如果知道数学定理之后,相当于告诉你: 任何正整数都可以拆分成不超过4个数的平方和 -> 答案只可能是1,2,3,4 如果一个数最少可以拆成4个数的 ...

  6. C#刷遍Leetcode面试题系列连载(4): No.633 - 平方数之和

    点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 前文传送门: 上篇文章中一道数学问题 - 自除数,今天我们接着分析 LeetC ...

  7. Python Leetcode(507.完美数)

    Python Leetcode(507.完美数) 对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为"完美数". 给定一个 正整数 n, 如果他是完美数,返回 ...

  8. LeetCode Valid Perfect Square(是否是平方数)

    题意:给出一正整数,不用 sqrt函数,判断该数是否是平方数 思路: 第一种,连续奇数和为平方数 代码如下: public class Solution {public boolean isPerfe ...

  9. leetcode题解279-完全平方数

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

最新文章

  1. 【jquery】用jsp写jquery的模板
  2. 开机不进去桌面执行gui_电脑系统崩溃进不去,简单几步设置U盘,快速找回桌面重要文件...
  3. 【数论】挖掘机技术哪家强(jzoj 3858)
  4. 【渝粤教育】电大中专建筑材料作业 题库
  5. 用R和BioConductor进行基因芯片数据分析(四):芯片内归一化
  6. ASP.NET连接SQL、Access、Excel数据库(三)——工厂模式
  7. 开源项目工时系统_浅谈:如何帮助企业成功实施一套项目工时管理系统
  8. GraphPad Prism 中文版 科研绘图工具
  9. Excel批量根据银行卡号查询银行卡的详细信息
  10. 在BAT工作是什么样的?来听听在职员工们的说法
  11. div盒模型宽高计算
  12. OEM,ODM,OBM,JDM概念
  13. Nginx安装成windows server 2016机器的服务
  14. TI飞控出现联系方式,Ti飞控芯片锁了解决办法
  15. 如何快速实现增长App用户量?
  16. 计算机夯实基础学习顺序
  17. 如何在opencv 和 vs 2019 调整运行窗口的大小
  18. 云上数据泄露DLP技术有哪些变化
  19. 电商平台投诉,都适用哪些场景
  20. java语言--------javaSE之内部类

热门文章

  1. 在计算机结构的简化模型中,2.4 计算机结构的简化模型
  2. PHP两个匿名函数传递性,PHP让人不知道的匿名函数的几种写法(附代码)
  3. python的chr可以转换中文吗,chr()在python中怎么实现编码的转换
  4. PHP函数中true表示什么,使用返回true或false的函数的PHP最佳实践是什么?
  5. ios布局 分为左右两块_安卓手机一年后卡顿,原因是安卓系统太开放了,改走iOS封闭之路...
  6. python源码剖析读书笔记总结_《Python源码剖析》读书笔记:内存垃圾回收
  7. springboot map数据类型注入_Spring Boot(五):春眠不觉晓,Mybatis知多少
  8. 计信院计算机英语期末考试,计算机英语考试题two
  9. java 继承 this_java多重继承的this属于谁
  10. java子网划分_IP地址子网划分_动力节点Java学院整理