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

LeetCode-279. 完全平方数

1、题目描述

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

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

示例 1:

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

示例 2:

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

2、代码

#include <vector>
#include <algorithm>
using namespace std;class Solution {
public:int numSquares(int n) {// dp[i]表示和为i的最少完全平方数的数量vector<int> dp(n + 1, n); // 初始化每个数最多由n个1组成dp[0] = 0; // 和为0不需要任何数for (int i = 1; i <= n; ++i) {// 尝试所有可能的完全平方数j²for (int j = 1; j * j <= i; ++j) {// 更新dp[i]为最小值dp[i] = min(dp[i], dp[i - j * j] + 1);}}return dp[n];}
};

3、解题思路

  • 初始化:我们将dp数组的大小设为n+1,并将每个元素初始化为n,这是因为最坏情况下,任何数i都可以表示为i个 1 的和(1 是最小的完全平方数)。
  • 状态转移:对于每个数i,我们检查所有可能的完全平方数j从 1 开始,直到大于i)。对于每个有效的,我们计算dp[i - j²] + 1,这表示使用一个后,剩下的和i - j²所需的最少完全平方数数量再加 1。我们取这些值中的最小值作为dp[i]的最终值。
  • 填充 dp 数组:对于每个数i(从 1 到 n),我们考虑所有可能的完全平方数(其中j² ≤ i),并通过dp[i - j²] + 1来更新dp[i]再强调一遍,因为如果使用了一个,那么剩下的和是i - j²,最少数量就是dp[i - j²]再加 1。
  • 结果:经过上述计算后,dp[n]中存储的就是和为n的最少完全平方数的数量。
http://www.xdnf.cn/news/1381285.html

相关文章:

  • Linux 软件编程(十三)网络编程:TCP 并发服务器模型与 IO 多路复用机制、原理epoll
  • 工业机器人如何通过Modbus TCP转CanOpen网关高效通信!
  • HTML贪吃蛇游戏实现
  • RAW API 的 TCP 总结2
  • 鸿蒙Harmony-从零开始构建类似于安卓GreenDao的ORM数据库(四)
  • 刷题日记0828
  • 未来模型会转向多模态吗
  • Logstash数据迁移之mysql-to-kafka.conf详细配置
  • 领悟8种常见的设计模式
  • 导入文件允许合并表格
  • HBase Compaction HFile 可见性和并发安全性分析
  • audioMAE模型代码分析
  • 流程控制语句(3)
  • 帕萨特盘式制动器cad+设计说明书
  • 【C语言16天强化训练】从基础入门到进阶:Day 13
  • week5-[一维数组]归并
  • 公共字段自动填充
  • 云计算学习100天-第29天
  • 基于SamOut的音频Token序列生成模型训练指南
  • Linux shell getopts 解析命令行参数
  • 算力沸腾时代,如何保持“冷静”?国鑫液冷SY4108G-G4解锁AI服务器的“绿色空调”!
  • 使用Rag 命中用户feedback提升triage agent 准确率
  • Elasticsearch数据迁移方案深度对比:三种方法的优劣分析
  • linu 网络 :TCP粘包及UDP
  • 【C++】C++11的右值引用和移动语义
  • STAGEWISE实战指南:从集成到使用的完整解决方案
  • vscode pyqt5设置
  • 【ai编辑器】使用cursor-vip获得cursor的pro版 pro plan(mac)
  • uniapp vue3 canvas实现手写签名
  • Flask测试平台开发,登陆重构