当前位置: 首页 > wzjs >正文

服装设计资源网站淘宝定向推广

服装设计资源网站,淘宝定向推广,腾讯云做网站,苏州制作企业网站的LeetCode 热题 100_完全平方数(84_279) 题目描述:输入输出样例:题解:解题思路:思路一(动态规划(完全背包)): 代码实现代码实现(思路一…

LeetCode 热题 100_完全平方数(84_279)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(动态规划(完全背包)):
      • 代码实现
        • 代码实现(思路一(动态规划(完全背包))):
        • 以思路一为例进行调试

题目描述:

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。

输入输出样例:

示例 1:
输入:n = 12
输出:3
解释:12 = 4 + 4 + 4

示例 2:
输入:n = 13
输出:2
解释:13 = 4 + 9

提示:
1 <= n <= 104

题解:

解题思路:

思路一(动态规划(完全背包)):

1、题目要求一个整数 n,返回 和为 n 的完全平方数的最少数量。从样例一的解释中:12 = 4 + 4 + 4。我们发现4是可以重复使用的,这样就凑成一个整数,且可重复使用自然而然的想到了完全背包。

2、具体思路如下:
① 首先考虑一个数 n 所包含的最大完全平方数是根号n=sqrt(n)。
② 可以将这个问题转化为完全背包问题:背包的容量为 n,物品的重量是 1 到 sqrt(n) 之间的完全平方数。
③ 使用一维dp数组,dp[j] 表示背包容量为 j 时,最少需要的物品数量(即最少的完全平方数个数)。
④ 状态转移方程:dp[j] = min(dp[j], dp[j - i × i] + 1),等号右侧 dp[j]代表没放ii,dp[j - i × i] + 1 代表放了 ii 。
⑤ 初始化 dp[0] = 0,因为容量为 0 时不需要任何物品。其余dp数组值为INT_MAX,因 dp[j] = min(dp[j], dp[j - i × i] + 1) ,取两值中的最小值。
这个博主的背包问题讲解的不错

3、复杂度分析:
① 时间复杂度:O(n * sqrt(n)),其中 n 为给定的正整数。状态转移方程的时间复杂度为 O(sqrt(n)),共需要计算 n 个状态,因此总时间复杂度为 O(n * sqrt(n))。
② 空间复杂度:O(n)。dp 数组所需的空间。

代码实现

代码实现(思路一(动态规划(完全背包))):
class Solution {
public:int numSquares(int n) {// 创建一个长度为 n+1 的 DP 数组,初始化为最大值 INT_MAXvector<int> dp(n+1, INT_MAX);// 背包容量为 0 时,所需物品数为 0dp[0] = 0;// 先遍历所有完全平方数 i * ifor (int i = 1; i * i <= n; i++) {// 遍历背包容量 j,从 i*i 到 n,更新 dp[j] 的最小值  (只有j>=i*i 才能装下i*i)// 可重复使用遍历顺序是从左到右for (int j = i * i; j <= n; j++) {// 状态转移方程,选择当前完全平方数 i*i,更新 dp[j]dp[j] = min(dp[j], dp[j - i * i] + 1);}}// 返回最终的结果,即 n 需要的最少完全平方数个数return dp[n];}
};
以思路一为例进行调试
#include<iostream>
#include<vector>
using namespace std;class Solution {
public:int numSquares(int n) {// 创建一个长度为 n+1 的 DP 数组,初始化为最大值 INT_MAXvector<int> dp(n+1, INT_MAX);// 背包容量为 0 时,所需物品数为 0dp[0] = 0;// 先遍历所有完全平方数 i * ifor (int i = 1; i * i <= n; i++) {// 遍历背包容量 j,从 i*i 到 n,更新 dp[j] 的最小值  (只有j>=i*i 才能装下i*i)for (int j = i * i; j <= n; j++) {// 状态转移方程,选择当前完全平方数 i*i,更新 dp[j]dp[j] = min(dp[j], dp[j - i * i] + 1);}}// 返回最终的结果,即 n 需要的最少完全平方数个数return dp[n];}
};int main() {Solution s;// 输出 numSquares(13) 的结果,期望输出 2(13 = 4 + 9)cout << s.numSquares(13) << endl;return 0;
}

LeetCode 热题 100_完全平方数(84_279)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

http://www.dtcms.com/wzjs/452291.html

相关文章:

  • 成都网站推广多少钱市场营销毕业后做什么工作
  • 网站建设 怎么跑业务seo百家论坛
  • 义乌做网站的最新军事新闻最新消息
  • 陕西省人民政府办公厅官网廊坊seo关键词优化
  • 网站效果图可以做动态的嘛搜索引擎营销的英文缩写是
  • 做网站要准备什么上海seo推广方法
  • 做网站的内容样本网站推广 方法
  • 怎么查看网站的建设时间国家提供的免费网课平台
  • 做偏门网站微信运营
  • 网站建设培训业务心得社群运营
  • 用wordpress做音乐网站又有什么新病毒出现了
  • 公司网站建设西安腾讯推广平台
  • 企业网站个人备案seo比较好的优化方法
  • 网站建设上传视频seo专员工资一般多少
  • 迪庆州建设局网站百度推广的费用
  • 登录建设官方网站国家重大新闻
  • 石河子网站建设公司seo关键词优化推广
  • 猪八戒网仿照哪个网站做的今日新闻 最新消息 大事
  • wps上怎么做网站点击分析表seo网站推广工具
  • 便利的邯郸网站建设淘宝店铺怎么推广和引流
  • 为什么要做网站首页设计三明网站seo
  • 如何设计b2c电子商务网站免费国外ddos网站
  • 网站源码下载免费源码网络推广发帖网站
  • 本地部署iis部署网站营销软文是什么意思
  • 求网站制作百度代理加盟
  • 响应式网站自助建设推广营销企业
  • 酒店要做关于网站ppt怎么做北京发生大事了
  • 嵌入式软件开发和c++软件开发360优化大师官方最新
  • b2c行业网站系统采集站seo提高收录
  • 长春网站建设ccnbkj国内优秀网站案例