动态规划-完全平方数

这篇具有很好参考价值的文章主要介绍了动态规划-完全平方数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

跟着九章侯老师学习了动态规划专题之后根据学习所总结:

1 题目描述

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

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

2 示例

2.1 示例 1:

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

2.2 示例 2:

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

2.3 提示:

1 <= n <= 104

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/perfect-squares
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

3 解题思路及方法

3.1 解题思路

3.1.1 确定状态

  • 最后一步:关注最优策略中最后一个完全平方数j^2;
  • 最优策略中n - j^2 也一定被划分成最少的完全平方数之和;
  • 需要知道n - j^2 最少被分成几个完全平方数之和;
  • 原来是求n最少被分成几个完全平方数之和
    • 子问题:
    • 状态:设f[i]表示i最少被分成几个平方数之和

3.1.2 转移方程

设f[i]表示i最少被分成几个平方数之和
动态规划-完全平方数

3.1.3 初始条件和边界情况

  • 设设f[i]表示i最少被分成几个平方数之和

  • 动态规划-完全平方数

  • 初始条件:0被分成0个完全平方数之和文章来源地址https://www.toymoban.com/news/detail-469979.html

    • f[0] = 0

3.1.4 计算顺序

  • 初始化f[0] = 0
  • 计算f[1],f[2],…,f[n]
  • 结果:f[n]

3.2 算法代码实现

class Solution {
public:
    int numSquares(int n) {
        vector<int> dp(n + 1);

        int i, j;
        dp[0] = 0;

        for (int i = 1; i <= n; i++) {
            dp[i] = INT_MAX;
            for (int j = 1; j * j <= i; j++) {
                dp[i] = min(dp[i], dp[i - j * j] + 1);
            }
        }

        return dp[n];
    }
};

到了这里,关于动态规划-完全平方数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法 DAY45 动态规划07 70. 爬楼梯 322. 零钱兑换 279. 完全平方数 139. 单词拆分 多重背包

    和377. 组合总和 Ⅳ (opens new window)基本就是一道题了。 本题代码不长,题目也很普通,但稍稍一进阶就可以考察完全背包 动态规划五部曲 1、确定dp[j]的含义 dp[j] 凑成 j 的最少硬币的个数 2、确定递推公式 比如想凑成3, 如果手里有1,那么最小个数就是dp[2]+1 如果手里有2,那

    2024年02月02日
    浏览(59)
  • java算法day45 | 动态规划part07 ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

    题目描述: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 = m n)个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 输入描述:输入共一行,包含两个正整数,分别表示n, m 输出描述:输出一个整数,表示爬到楼顶的方法数

    2024年04月14日
    浏览(54)
  • 算法打卡day39|动态规划篇07| Leetcode 70. 爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数

    Leetcode 70. 爬楼梯(进阶版) 题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 = m n)个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 输入描述:输入共一行,包含两个正整数,分别表示n, m 输出描述:输出一个整数,

    2024年04月14日
    浏览(65)
  • 第42天-DP-第九章● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

    - LeetCode链接 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? - LeetCode链接 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬

    2024年02月01日
    浏览(46)
  • 【LeetCode题目详解】第九章 动态规划part06 完全背的讲解 518. 零钱兑换 II 377. 组合总和 Ⅳ (day44补)

    # 完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。 每件物品都有无限个(也就是可以放入背包多次) ,求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一不同的地方就是,每种物品有无限件 。

    2024年02月09日
    浏览(35)
  • 【随想录学习】——第十章 动态规划(0-1背包+完全背包)

    动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的, 这一点就区分于贪心 ,贪心没有状态推导,而是从局部直接选最优的, dp数组表示斐波那契数列,dp[i]表示

    2024年01月19日
    浏览(62)
  • 第九章 动态规划part10

    121. 买卖股票的最佳时机 122. 买卖股票的最佳时机 II 分多次购买和一次购买的区别

    2024年04月10日
    浏览(44)
  • 第九章动态规划——不同路径(二)有障碍物

    目录 力扣题号:63. 不同路径 II - 力扣(LeetCode) 题目描述 示例 提示 思路 解法一:动态规划 (1)dp数组的下标及其含义 (2)确定递推公式 (3)初始化递推数组 (4)确定遍历顺序 (5)根据题意推出dp数组对照 障碍物处理 代码实现 总结 注:下述题目描述和示例均来自力

    2024年04月23日
    浏览(34)
  • 代码随想录 day38 第九章 动态规划part01

    ●  理论基础 ●  509. 斐波那契数 ●  70. 爬楼梯 ●  746. 使用最小花费爬楼梯 理论基础 解决动态规划必须要想清楚的点 dp数组以及下标的含义 递推公式 dp数组如何初始化 遍历顺序 打印数组 检查结果 关联 leetcode 509. 斐波那契数 思路 动规五部曲 dp数组以及下标的含义

    2024年04月17日
    浏览(48)
  • 蓝桥杯专题-真题版含答案-【垒骰子_动态规划】【抽签】【平方怪圈】【凑算式】

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 点击跳转=软考全系列 点击跳转=蓝桥系列 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包