Leetcode 279. Perfect Square

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

For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.

 

这道题首先想到的算法是DP。每个perfect square number对应的解都是1。先生成一个n+1长的DP list。对于每个i,可以用dp[i] = min(dp[j] + dp[i-j], dp[i])来更新,这里j 是<= i 的一个perfect square number。但是DP的算法超时。

 1 class Solution(object):
 2     def numSquares(self, n):
 3         """
 4         :type n: int
 5         :rtype: int
 6         """
 7         MAX = 2147483647
 8         m = 1
 9         perfect = [m]
10         while m**2 <= n:
11             perfect.append(m**2)
12             m += 1
13         
14         dp = [MAX]*(n+1)
15         dp[0] = 1
16         for x in perfect:
17             dp[x] = 1
18         
19         for i in range(2, n+1):
20             curP = [x for x in perfect if x <= i]
21             for j in curP:
22                 dp[i] = min(dp[j] + dp[i-j], dp[i])
23         
24         return dp[-1]

 

解法二: 来自 https://www.cnblogs.com/grandyang/p/4800552.html

任何一个正整数都可以写成最多4个数的平方和。然后又两条性质可以简化题目:

1. 4q 和 q 的答案一样,i.e. 3, 12。

2. 如果一个数除以8余7 <=> 答案是4。

 1 class Solution(object):
 2     def numSquares(self, n):
 3         """
 4         :type n: int
 5         :rtype: int
 6         """
 7         while n % 4 == 0:
 8             n = n//4
 9         
10         if n % 8 == 7:
11             return 4
12         
13         a = 0
14         while a**2 <= n:
15             b = int(math.sqrt(n - a**2))
16             if a**2 + b**2 == n:
17                 if a>0 and b>0:
18                     return 2
19                 if a == 0 and b>0:
20                     return 1
21                 if a>0 and b==0:
22                     return 1
23             a += 1
24         return 3

 

转载于:https://www.cnblogs.com/lettuan/p/6183123.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php文件解锁,php文件锁怎么用

php文件锁怎么用PHP出现文件锁与mysql表锁有大概想的用法,就是同一时间只能让一个人操作,这样就避免了同时有多个人操作同一文件,这样导致数据丢失的情况了。以下是小编为大家搜索整理的PHP文件锁怎么用&#xff0c;希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生…

zblog php 外部调用,ZBlogPHP调用指定ID文章的代码GetPost()函数

在zblog主题开发中&#xff0c;我们最常用到的就是文章的调用了&#xff0c;毕竟不管是首页还是内页基本都离不开文章&#xff0c;下面这段代码是用来调用指定ID的文章的代码&#xff0c;一般常用在文章推荐这样的布局当中。用到的函数&#xff1a;GetPost()$aritcle GetPost(…

php 自带缓存,封装ThinkPhP自带的缓存机制

namespace Home\Controller;use Think\Controller;use Think\Think;/*** param string $cache_folder 缓文件夹* param int $cache_create_time 文件缓存时间* example $cache->read_cache() 读取缓存并输出* example $cache->create_cache() 创建缓存文件(放在文件未尾)…

等高线的认识

contour&#xff1a; 轮廓&#xff1b;等高线。是三维图像信息在二维坐标平面上的投影。但其仍维护着三维信息&#xff0c;比如使用特殊的颜色标出&#xff08;不同高度含义的曲线&#xff09;。 1. 等高线的意义 利用 xy 平面内的等高线&#xff0c;可以给出函数 uf(x,y) 的另…

java替换list中元素,Java 实例 - List 元素替换

以下实例演示了如何使用 Collections 类的 replaceAll() 来替换List中所有的指定元素&#xff1a; /*author by shouce.renMain.java*/import java.util.*;public class Main {public static void main(String[] args) {List list Arrays.asList("one Two three Four fiv…

mysql 常用命令(一)

1. 函数向日期添加指定的时间间隔 DATE_ADD(date,INTERVAL expr type)eg:DATE_ADD(CURDATE(),INTERVAL 1 MONTH) //在当前时间加一个月 2.计算年龄 eg:select birth ,CURDATE, YEAR(CURDATE())-YEAR(birth) - (RIGHT(MONTH(CURDATE)&#xff0c;&#xff15;) < &#xff32…

php钓鱼怎么使用方法,盘钩使用方法

中钓网资深钓友为大家分享盘钩的使用方法&#xff0c;很难跑鱼的钓鱼新武器——盘钩。盘钩&#xff0c;老瞿最新专利&#xff0c;刚刚开发出来。经过两年的实践&#xff0c;效果大大地好&#xff0c;钩子多&#xff0c;吃进去&#xff0c;要吐出来就难了。管它什么鱼&#xff0…

SQL Server-聚焦APPLY运算符(二十七)

前言 其实有些新的特性在SQL Server早就已经出现过&#xff0c;但是若非系统的去学习数据库你会发现在实际项目中别人的SQL其实是比较复杂的&#xff0c;其实利用新的SQL Server语法会更加方便和简洁&#xff0c;从本节开始我们将讲述一些SQL Server中早已出现的新语法&#xf…

php中的解析范围符,如何合理使用php7范围解析操作符

class Base{const mynum1111;//基类常量public static $num11;//基类静态成员变量public $namebase zhangsan;//基类普通成员变量public function hi(){//普通成员函数echo base普通方法-调用自己的常量.self::mynum.;//1111echo base普通方法-调用自己的静态成员变量.self::$n…

php项目课题,php课题

异步调用 功能说明 桶相关接口和对象相关接口均支持以“Async”结尾的方式进行异步调用(例如&#xff0c;同步方法为ObsClient->putObject&#xff0c;则异步方法为ObsClient->putObjectAsync)。异步调用完成后会将返回结果输出到回调函数中&#xff0c;回调函数依次包含…

vs2013和vs2010的配置

win10下vs2013和vs2010的相关配置 ------made by siwuxie095 主要是推荐一些vs2013和vs2010的好用的插件和配色方案&#xff0c;下面主要是以vs2013示例 1、首先是配色方案&#xff0c;一般情况下安装好了IDE之后&#xff0c;为了护眼&#xff0c;都是直接调成了暗色调或深色…

php 伪静态是什么意思,路由与伪静态

## 路由与伪静态### 路由>[info] 字面上解释&#xff0c;路是线路&#xff0c;道路&#xff1b;由&#xff0c;缘由&#xff0c;指意&#xff0c;表示规则&#xff1b;所以意思就是按照什么规则&#xff0c;或者意义&#xff0c;被指派到什么地方去。所以路由是指线路分发&a…

MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)

前面讲了模态对话框和非模态对话框&#xff0c;本节来将一种特殊的对话框——属性页对话框。 属性页对话框的分类 属性页对话框想必大家并不陌生&#xff0c;XP系统中桌面右键点属性&#xff0c;弹出的就是属性页对话框&#xff0c;它通过标签切换各个页面。另外&#xff0c;我…

Linux用户与“最小权限”原则

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; 作为一个Linux用户来说&#xff0c;我们并不需要特别关心下面的机制。但是&#xff0c;当我们去编写一个Linux应用程序的时候&#xff0c;就要注…

js urlencode 20 php,js实现php函数urlencode

本文介绍了php函数urlencode的js实现方法并比较js和php各编码函数的区别。 通常form表单的enctype类型为 application/x-www-form-urlencoded, 当表单提交后&#xff0c;提交的数据自动被编码&#xff0c; 规则为 除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两…

.NET CORE在ubuntu1604上运行

本文主要描述.NET CORE在Ubuntu上“自包含应用”不一来.NET SDK发布&#xff08;类似于golang的方式&#xff09; 1.用rider或者直接用dotnet new方式创建一个项目&#xff1b;可以看到产生了两个文件 dotnet new 会创建一个最新的 project.json 文件&#xff0c;其中包含生成控…

php代码审计靶场,代码审计 | Wavsep靶场审计防御

—————— 昨日回顾 ——————红日安全出品|转载请注明来源文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用&#xff0c;任何人不得将其用于非法用途以及盈利等目的&#xff0c;否则后果自行承担&#xff01;(来源&#xff1a;红日安全)—————— ——…

Python 爬虫抓取代理IP,并检测联通性

帮朋友抓了一些代理IP&#xff0c;并根据测试联的通性&#xff0c;放在了不通的文件夹下。特将源码分享 注意&#xff1a; 1&#xff0c;环境Python3.5 2&#xff0c;安装BeautifulSoup4 requests 代码如下: 123456789101112131415161718192021222324252627282930313233343536…

php gps坐标转换经纬度,GPS坐标(经纬度转换xy坐标算法)

我用GPS-DG16测得某地的经纬度&#xff0c;然后想将该经纬度转换为80坐标系的经纬。1.看你的精度要求&#xff0c;如果厘米级的&#xff0c;则需要至少3个已知点&#xff0c;这3个点上要有80坐标系的经纬度&#xff0c;另外你再去用gps-dg16采集这三个点的wgs84经纬度&#xff…

java初始化顺序

原文地址http://blog.sina.com.cn/s/blog_4cc16fc50100bjjp.html对于静态变量、静态初始化块、变量、初始化块、构造器&#xff0c;它们的初始化顺序依次是&#xff08;静态变量、静态初始化块&#xff09;>&#xff08;变量、初始化块&#xff09;>构造器。我们也可以通…