题目

https://leetcode.com/problems/perfect-squares/

题解:动态规划

参考:【宫水三叶】详解完全背包一维空间优化推导(附背包问题攻略)

  • 首先初始化长度为 n+1 的数组 dp,每个位置都为 0
  • 如果 n 为 0,则结果为 0
  • 对数组进行遍历,下标为 i,每次都将当前数字先更新为最大的结果,即 dp[i]=i,比如 i=4,最坏结果为 4=1+1+1+1 即为 4 个数字
  • 状态转移方程为:dp[i] = MIN(dp[i], dp[i - j * j] + 1),i 表示当前数字,j*j 表示平方数,实际上是 dp[i] = Math.min(dp[i], dp[i - j * j] + dp[j * j]) 的简化版,因为 dp[j * j] 必然是 1
  • 时间复杂度:O(n∗sqrt(n)),其中 sqrt 为平方根
class Solution {public int numSquares(int n) {int[] dp = new int[n + 1];for (int i = 0; i <= n; i++) {dp[i] = i;for (int j = 1; i - j * j >= 0; j++) {// dp[i] = Math.min(dp[i], dp[i - j * j] + dp[j * j]);dp[i] = Math.min(dp[i], dp[i - j * j] + 1);}}return dp[n];}
}

leetcode 279. Perfect Squares | 279. 完全平方数(动态规划,Java)相关推荐

  1. LeetCode 279. Perfect Squares

    279. Perfect Squares Given a positive integer n, find the least number of perfect square numbers (fo ...

  2. leetcode -- 279. Perfect Squares

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

  3. 279 Perfect Squares 完美平方数

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

  4. 【Breadth-first Search 】279. Perfect Squares

    输入:一个非负整数n. 输出:这个非负整数可以写成几个完全平方数.返回这个数量. 规则:完全平方数可以表示为某个整数的平方.例如:1,4,9- 分析:13=4+9 也就是说13可以写成2个完全平方数的 ...

  5. 279. Perfect Squares

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

  6. Xiaohe-LeetCode 279 Perfect Squares

    (1)Best way.94% This one uses Lagrange's four-square theorem. According to it, every integer is a su ...

  7. [LeetCode]Perfect Squares

    题目链接:Perfect Squares 题目内容: Given a positive integer n, find the least number of perfect square numbe ...

  8. LeetCode部分习题解答记录-动态规划

    LeetCode部分习题解答记录-动态规划 动态规划 120.三角形最小路径和 方法:递归+记忆化 方法2:DP 64.最小路径和 方法1:递归 方法2:DP 从终点到起点,逐步更新 从起点到终点,逐 ...

  9. LeetCode (12.整数转罗马数字)JAVA StringBuffer

    LeetCode (12.整数转罗马数字)JAVA StringBuffer 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 1 ...

最新文章

  1. 2018~2019-11 20165107 网络对抗技术期末免考 Exp10 Final Powershell学习应用与渗透实践...
  2. JDBC的批处理操作
  3. 计算机网络tcp三次握手,快速掌握_计算机网络_TCP_三次握手
  4. python使用proxy
  5. 处理器指令编码可重定义的方法_RISC-V学习笔记1 《基于FPGA与RISC-V的嵌入式系统设计》第3章 RISC-V指令集...
  6. 非root用户安装软件
  7. Oracle 11g完全卸载(Windows)
  8. 让vim在utf-8的local下打开 gbk 文件
  9. 图片无损压缩软件哪个好用:试试完全免费的JPG-C 图片批量修整压缩减肥工具吧 | 最新jpg批量修整工具下载
  10. JS控制DIV的显示隐藏 。js中radio的取值 。JS控制select的方法(摘取)。js 控制表单中SELECT
  11. cad剖切线的快捷键_CAD快捷键记不住怎么办?顶级绘图员教你,从此不求人
  12. Cesium中的地球坐标系转换:岁差章动计算(XYs)
  13. Word 论文排版操作顺序
  14. 高校计算机实验员岗位职责,计算机学院实验与实训中心主任岗位职责(参考Word)...
  15. 配置mt7620a上的双SSID
  16. 《微信小程序-基础篇》初识微信小程序
  17. 切入点和切入点表达式(AOP面向切面编程)
  18. 常用的端口号有哪些?
  19. windows10如何开机自动运行bat文件
  20. scheduling agreement 计划协议详解

热门文章

  1. CH - 0104 起床困难综合症(位运算+贪心)
  2. POJ - 3660 Cow Contest(最短路变形+闭包传递)
  3. 语言for循环联程_Lua循环
  4. Linux闲时自动抢占GPU脚本
  5. hive 自定义元数据表_Hive分区表和桶表的使用
  6. 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----自定义攻击篇
  7. MFC六大核心机制之四:永久保存(串行化)
  8. SQLLite (二) :sqlite3_open, sqlite3_exec, slite3_close
  9. 云原生环境下对“多活”架构的思考
  10. OS- -调度(一)