Leetcode 279. 完全平方数

  • 1、问题分析
  • 2、问题解决
  • 3、总结

1、问题分析

题目链接:https://leetcode-cn.com/problems/perfect-squares/
  本质上就是一个动态规划问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。

2、问题解决

  笔者以C++方式解决。

#include "iostream"using namespace std;#include "algorithm"
#include "vector"
#include "queue"
#include "set"
#include "map"
#include "string"
#include "stack"class Solution {// 定义 i 最少可以用多少个完全平方数表示,即个数数组// 例如: dp[10] 代表 10 最少可以用多少个完全平方数表示vector<int> dp;// 定义完全平方数数组,存储 i*i<=n 的所有数// 例如 n == 10, square={1,2,3}vector<int> square;
public:int numSquares(int n) {// 边界处理if (n == 1) {return 1;}if (n == 2) {return 2;}// 初始化个数数组dp.resize(n);// 初始化完全平方数数组for (int i = 1; i < n; ++i) {if (i * i <= n) {square.push_back(i);}else {break;}}return dealChen(n);}/*** 计算 n 最少可以由多少个完全平方数组成* @param n* @return*/int dealChen(int n) {// 递归边界,这里仍然要注意不要溢出if (n < 0) {return INT_MAX / 100;}// 0 说明不需要完全平方数,直接返回 0if (n == 0) {return 0;}// 如果值已经计算过,则直接返回if (dp[n-1] != 0) {return dp[n-1];}int number_chen = INT_MAX/2;// 遍历完全平方数数组// 状态转移方程为 :// dp[n] = dp[n-i*i] + 1for (int i = square.size() - 1; i >= 0; --i) {// 选择其中最小的一个number_chen = min(number_chen, dealChen(n - square[i] * square[i]) + 1);}// 存储 最少可以由多少个完全平方数组成dp[n-1] = number_chen;// 返回计算结果return dp[n-1];}
};int main() {Solution *pSolution = new Solution;int i = pSolution->numSquares(13);cout << i << endl;system("pause");return 0;
}

运行结果

有点菜,有时间再优化一下。

3、总结

  难得有时间刷一波LeetCode, 这次做一个系统的记录,等以后复习的时候可以有章可循,同时也期待各位读者给出的建议。算法真的是一个照妖镜,原来感觉自己也还行吧,但是算法分分钟教你做人。前人栽树,后人乘凉。在学习算法的过程中,看了前辈的成果,受益匪浅。
感谢各位前辈的辛勤付出,让我们少走了很多的弯路!
哪怕只有一个人从我的博客受益,我也知足了。
点个赞再走呗!欢迎留言哦!

Leetcode 279. 完全平方数相关推荐

  1. LeetCode 279.完全平方数

    LeetCode 279.完全平方数 bfs写法,还有四平方定理,那个看不懂 public:int numSquares(int n) {vector<bool> vis(n+1,fals ...

  2. leetcode - 279. 完全平方数

    279. 完全平方数 -------------------------------------------- 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, -)使得它们的和等 ...

  3. Java实现 LeetCode 279 完全平方数

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

  4. leetcode 279. 完全平方数 bfs广度优先解法 图解 动态规划解法 c代码

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

  5. Leetcode 279. 完全平方数 解题思路及C++实现

    两种都是动态规划的方法,但第一种比较暴力和愚蠢,第二种利用了完全平方数. 方法一:无脑动态规划,会超时 解题思路: 利用一维数组存储 n 个整数的结果. 首先要判断 i 是不是 就是一个完全平方数,如 ...

  6. leetcode 279. 完全平方数(dp)

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

  7. 【超直白】leetcode 279 完全平方数

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

  8. LeetCode 279. 完全平方数(动态规划)

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

  9. Javascript(JS) leetcode 279. 完全平方数

    给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 . 完全平方数 是一个整数,其值等于另一个整数的平方:换句话说,其值等于一个整数自乘的积.例如,1.4.9 和 16 都是完全平方数,而 3 ...

最新文章

  1. AI公司融了1500万美元,却引来LeCun「嘲讽三连」,还要出书调侃CEO?
  2. 王高利:Kvm虚拟化(1)__基础搭建
  3. 机器学习隐私研究新进展:数据增强风险被低估,新算法“降服”维数依赖
  4. Eclipse 设置
  5. Python基本语法_控制流语句_if/while/for
  6. Juventas, the Roman Goddess of Youth [ Juventas, 罗马青春女神]
  7. Gram matrix 格拉姆矩阵
  8. java防xss攻击_java 防止xss攻击
  9. 编译telepresence:没有规则可制作目标“tinywrap/ActionConfig.cxx”,由“telepresence-ActionConfig.o” 需求。
  10. 联想笔记本键盘排线,联想笔记本原装键盘价格表 联想笔记本键盘如何更换
  11. aho-corasick php,基于 Aho-Corasick 算法实现中文全分词
  12. DeepCross Network(DCN)
  13. Data Binding学习(一)
  14. 国内TCP单边 加速 的 正确 做法
  15. 励志语录(忙碌的同时也要停下来思考人生)
  16. 语音笔记APP哪个好 用它直接录音并整理很方便
  17. Java进阶教程-马士兵
  18. Java产生一个随机数【详细教学】巨简单
  19. Peter Schiff:如果大饼跌破3万刀,那么它将跌破1万
  20. 《大象:thinking in uml 》(第二版) 3章 UML核心元素 3节 用例

热门文章

  1. Visit of the Great
  2. 私域运营第十一讲:企业微信裂变营销避坑指南
  3. mysql 中的大于小于等于符号_MySQL中大于等于小于等于的写法
  4. Python NLP初识-小试牛刀
  5. Typora 常用快捷键 mac系统
  6. html语言换行符,html换行符
  7. Goland 提示 Unresolved reference 错误解决
  8. vue 网页微信扫码登陆 前端 全
  9. python求雅可比矩阵_提高自组雅可比矩阵的性能
  10. 1379A. Acacius and String + 1379B.B. Dubious Cyrpto