写点什么

leetcode 279. Perfect Squares 完全平方数 (中等)

作者:okokabcd
  • 2022 年 6 月 21 日
  • 本文字数:667 字

    阅读完需:约 2 分钟

leetcode 279. Perfect Squares 完全平方数(中等)

一、题目大意

标签: 动态规划


https://leetcode.cn/problems/perfect-squares


给你一个整数 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

二、解题思路

动态规划,dp[i]表示 i 有几个完全平方数的加和构成,枚举比 i 小的完全平方数,状态转移方程为 dp[i] = min(dp[i-k] + 1) ,k 就是完全平方数

三、解题方法

3.1 Java 实现

class Solution {    public int numSquares(int n) {        // 找小于n的完全平方数        List<Integer> squares = new ArrayList<>();        for (int i = 1; i < n + 1; i++) {            int tmp = i * i;            if (tmp < n + 1) {                squares.add(tmp);            } else {                break;            }        }
int[] dp = new int[n + 1]; for (int i = 1; i < n + 1; i++) { dp[i] = Integer.MAX_VALUE; } for (int i = 1; i < n + 1; i++) { for (int square : squares) { if (i < square) { break; } dp[i] = Math.min(dp[i], dp[i - square] + 1); } }
return dp[n]; }}
复制代码

四、总结小记

  • 2022/6/21 坚持每天一道 leetcode,养成一个习惯

发布于: 刚刚阅读数: 3
用户头像

okokabcd

关注

还未添加个人签名 2019.11.15 加入

一年当十年用的Java程序员

评论

发布
暂无评论
leetcode 279. Perfect Squares 完全平方数(中等)_LeetCode_okokabcd_InfoQ写作社区