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

LeetCode hot 100—完全平方数

题目

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

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

示例

示例 1:

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

示例 2:

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

分析

设 dp[i] 表示和为 i 的完全平方数的最少数量。对于每个 i,我们可以枚举所有可能的完全平方数 j * j(其中 j * j <= i),并更新 dp[i] 的值。状态转移方程为:
dp[i]=min_{1\leq j^{2}\leq i}(dp[i-j^{2}])+1

动态规划法

对于每个 i 从 1 到 n,枚举所有可能的完全平方数 j * j(其中 j * j <= i),并更新 dp[i] 的值。dp[i - j * j] + 1 表示使用一个完全平方数 j * j 后,和为 i 的完全平方数的最少数量。

时间复杂度:O(n\sqrt{n}), n 是输入的整数

空间复杂度:O(n)

class Solution {
public:
    int numSquares(int n) {
        // 初始化 dp 数组,dp[i] 表示和为 i 的完全平方数的最少数量
        std::vector<int> dp(n + 1, INT_MAX);
        // 和为 0 的完全平方数的最少数量为 0
        dp[0] = 0;
        // 遍历从 1 到 n 的每个数
        for (int i = 1; i <= n; ++i) {
            // 枚举所有可能的完全平方数 j * j
            for (int j = 1; j * j <= i; ++j) {
                // 更新 dp[i] 的值
                dp[i] = std::min(dp[i], dp[i - j * j] + 1);
            }
        }
        return dp[n];
    }
};    

http://www.kler.cn/a/611100.html

相关文章:

  • 基于python+django的图书借阅网站-图书借阅管理系统源码+运行步骤
  • ElementUI表格添加默认值不生效
  • VSCode 生成HTML 基本骨架
  • 【gradio】从零搭建知识库问答系统-Gradio+Ollama+Qwen2.5实现全流程
  • Android 启动流程详解:从上电到桌面的全流程解析
  • 模数转换电路(A/D转换器)
  • Android adb自身调试log开关
  • 每天五分钟深度学习框架PyTorch:获取循环神经网络RNN模型的参数
  • K8S基础知识:DaemonSet、Deployment、StatefulSet的用法区别
  • 【MySQL】索引 事务
  • 《基于python游戏设计与实现》开题报告
  • 创新前沿 | 接管主机即刻增量CDP备份,高效保障接管期间业务安全!
  • 基于腾讯云大模型知识引擎×DeepSeek的高等职业学校单独招生二级学院考前咨询系统
  • CentOS7 离线部署MySQL8.0+
  • 建造者模式的优点及其在优秀框架中的实现案例
  • GitLab 中文版17.10正式发布,27项重点功能解读【一】
  • 贪心算法经典应用:最优答疑调度策略详解与Python实现
  • Headless Chrome 优化:减少内存占用与提速技巧
  • Spring AI Alibaba ImageModel使用
  • 需求导向的K8S网络原理分析:Kube-proxy、Flannel、Calico的地位和作用