LeetCode 刷题 [C++] 第279题.完全平方数

news/2025/1/24 6:35:16/

题目描述

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

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

题目描述

本题使用动态规划思想来解决:

  1. 状态表达式:dp[i] 表示最少需要多少个数的平方来表示整数i;

  2. 由于这些数必然落在区间[1,n的平方根],我们来枚举这些数,假设当前枚举到j,那么我们还需要取若干数的平方,构成 i − j*j,即子问题和原问题类似,动态规划的要求,得到状态转移方程:

    • dp[i] = min(dp[i], dp[i - j * j] + 1),i 表示当前数字,j * j 表示平方数
  3. 将dp数组元素初始化为INT_MAX,而dp[0]单独赋值为0为边界条件,是为了保证状态转移过程中遇到 j 恰为i的平方根的情况合法。

Code

class Solution {
public:int numSquares(int n) {vector<int> dp(n + 1, INT_MAX);dp[0] = 0;for (int i = 1; i <= n; ++i) {for (int j = 1; j * j <= i; ++j) {dp[i] = min(dp[i],dp[i - j * j] + 1);}}return dp[n];}
};

http://www.ppmy.cn/news/1369914.html

相关文章

STL容器之map和set

map和set ​ c98支持的是单参数的隐式类型转换&#xff0c;而c11支持多参数的隐式类型转换&#xff1b; 1.map和set的使用 1.1set ​ set实现key值不允许修改&#xff0c;是将iterator转变成const_iterator&#xff1b;可以对同一个类型typedef成两个不同的自定义标识符。即…

day09_商品管理订单管理SpringTaskEcharts

文章目录 1 商品管理1.1 添加功能1.1.1 需求说明1.1.2 核心概念SPUSKU 1.1.3 加载品牌数据CategoryBrandControllerCategoryBrandServiceCategoryBrandMapperCategoryBrandMapper.xml 1.1.4 加载商品单元数据ProductUnitProductUnitControllerProductUnitServiceProductUnitMap…

力扣203移除链表元素

题目&#xff1a; 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 1&#xff0c;设置一个头节点&#xff0c;统一操作。 2&#xff0c;这里是用p查找&#xff0c;但是…

2024上海国际高性能弹性体产业展暨高峰论坛

2 024上海国际高性能弹性体产业展暨高峰论坛 2024 Shanghai International High Performance Elastomer Industry Exhibition and Summit Forum 展会基本信息&#xff1a; 展会时间&#xff1a;2024年9月24-28日 展会地点&#xff1a;国家会展中心-上海虹桥 展位面积&…

30天自制操作系统(第23天)

23.1 编写malloc 参考第22天的内容&#xff0c;在绘制窗口前先分配了150*50个字节大小的内存&#xff0c;所以导致该文件经编译后有7.6k左右&#xff0c;能否在其中使用指针呢&#xff1f;当需要开辟空间时&#xff0c;移动指针即可。在之前的章节中也有函数memman_alloc函数可…

LeetCode 刷题 [C++] 第121题.买卖股票的最佳时机

题目描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的…

C# ConcurrentQueue对列的基本使用方式

前言 队列&#xff08;Queue&#xff09;代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时&#xff0c;则使用队列。当您在列表中添加一项&#xff0c;称为入队&#xff0c;当您从列表中移除一项时&#xff0c;称为出队。 ConcurrentQueue<T>队列是一个…

Linux/Docker 修改系统时区

目录 1. Linux 系统1.1 通过 timedatectl 命令操作1.2 直接修改 /etc/localtime 文件 2. Docker 容器中的 Linux 操作环境&#xff1a; CentOS / AlmaOSMySQL Docker 镜像 1. Linux 系统 1.1 通过 timedatectl 命令操作 使用 timedatectl list-timezones 命令列出可用的时区…