动态规划

完全平方数

中等#279Java时间 O(n √n)空间 O(n)

题目要做什么

把正整数 n 表示为若干完全平方数之和,返回所需平方数的最少数量。平方数可以重复使用。

题目示例输入n = 12
题目示例输出3

01 为什么这样做

dp[x] 表示组成 x 的最少平方数数量。枚举最后一个平方数 j²,候选值为 dp[x−j²]+1,取所有候选中的最小值。

始终成立的条件

计算 dp[x] 时,所有较小金额的最优值已经确定。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    public int numSquares(int n) {3        int[] dp = new int[n + 1];4        for (int x = 1; x <= n; x++) {5            dp[x] = x;6            for (int j = 1; j * j <= x; j++) {7                dp[x] = Math.min(dp[x], dp[x - j * j] + 1);8            }9        }10        return dp[n];11    }12}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索