279. 完全平方数

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

示例 1:

输入: n = 12

输出: 3

解释: 12 = 4 + 4 + 4.

示例 2:

输入: n = 13

输出: 2

解释: 13 = 4 + 9.

PS:

动态规划在数学面前一文不值

任何正整数都可以拆分成不超过4个数的平方和 —> 答案只可能是1,2,3,4

如果一个数最少可以拆成4个数的平方和,则这个数还满足 n = (4^a)*(8b+7)

因此可以先看这个数是否满足上述公式,如果不满足,答案就是1,2,3了

如果这个数本来就是某个数的平方,那么答案就是1,否则答案就只剩2,3了

如果答案是2,即n=a2+b2,那么我们可以枚举a,来验证,如果验证通过则答案是2

只能是3

class Solution {
public int numSquares(int n) {
while(n%4==0)
{
n/=4;
}
if(n%8==7)
return 4; int a=0;
while((a*a)<=n)
{
int b=(int)Math.pow((n-a*a),0.5);
if(a*a+b*b==n)
{
if(a!=0&&b!=0)
{
return 2;
} else
{
return 1;
}
}
a++;
}
return 3;
}
}

动态规划:

class Solution {
public int numSquares(int n) {
int[] dp = new int[n+1];
for(int i = 1; i <= n; i++){
dp[i] = Integer.MAX_VALUE;
}
for(int i = 1; i <= n; i++){
for(int j = 1; j*j <= i; j++){
if(i >= j*j){
dp[i] = Math.min(dp[i],dp[i-j*j]+1);
}
}
}
return dp[n];
}
}

Java实现 LeetCode 279 完全平方数的更多相关文章

  1. LeetCode 279. 完全平方数(Perfect Squares) 7

    279. 完全平方数 279. Perfect Squares 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数 ...

  2. [LeetCode] 279. 完全平方数(DP)

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

  3. LeetCode 279. 完全平方数(Perfect Squares)

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

  4. Leetcode 279. 完全平方数

    题目描述: https://leetcode-cn.com/problems/perfect-squares/ 解题思路: 同样是dp,一开始的想法是,对于每个数i做拆分为j和(i-j),利用动态转移 ...

  5. LeetCode:完全平方数【279】【DP】

    LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...

  6. Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares)

    Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ar ...

  7. [LeetCode 279.] Perfect Squres

    LeetCode 279. Perfect Squres DP 是笨办法中的高效办法,又是一道可以被好办法打败的 DP 题. 题目描述 Given a positive integer n, find ...

  8. Java for LeetCode 216 Combination Sum III

    Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...

  9. Java for LeetCode 214 Shortest Palindrome

    Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...

随机推荐

  1. 【HDU4990】递推式

    题目大意:给定序列 1, 2, 5, 10, 21, 42, 85, 170, 341 …… 求第n项 模 m的结果 递推式 f[i]  = f[i - 2] + 2 ^ (i - 1); 方法一:  ...

  2. Nginx|构建简单的文件服务器(mac) 续-FastDFS安装(mac)|文件存储方案

    目录 Nginx|构建简单的文件服务器(mac) 1 所需安装包 2 安装fastdfs-nginx-module-master 3 安装Nginx Nginx|构建简单的文件服务器(mac) 续上文 ...

  3. PK,FK, UK,DF, CK

    PK 主键 constraint primary key FK 主外键关系 constraint foreign references UK 唯一约束 constraint unique key DF ...

  4. linux-rpm强制安装跳过依赖包

    [root@localhost ~]# rpm -ivh tigervnc-1.10.80-4.20200317git8b4be5fd.el7.x86_64.rpm --nodeps --force ...

  5. window 10电脑永不熄屏的方法

    你的电脑是不是人还没有离开一会儿,经常锁屏,输入密码??反复反复,特别的折磨人,别急,下面我教你,告别反复,从此我的电脑我做主. 第一步,打开设置,进入个性化界面,点击锁屏界面,往下滑 第二步,找到屏 ...

  6. php5.2安装memcached 扩展

    需要注意版本号,好坑. libmemcached release 1.0.16 - installed from sourcephp-memcached release 2.1.0 - install ...

  7. npm WARN enoent ENOENT: no such file or directory

    https://github.com/visionmedia/debug/issues/261

  8. flask之Flask-session三方组件

    from flask import Flask, views, render_template, request, session, redirect import redis as redis #p ...

  9. Win10上禁用Device Guard以便运行VMware

    Win10上每次大版本升级后,如果你试图运行VMware,都会提示如下的错误信息: “VMware Workstation 与 Device/Credential Guard 不兼容.在禁用 Devi ...

  10. CDN是啥?

    CDN 介绍 CDN ( Content Delivery Network ),也即内容分发网络.通过将网站内容(如图片.JavaScript .CSS.网页等)分发至全网加速节点,配合精准智能调度系 ...