Leetcode 题目解析:279. 完全平方数
系列文章:
一 摘要
一道典型的动态规划题目,虽然之前在中介绍过了动态规划的原理、应用场景和题目示例,不过也并不是所有人都能熟练掌握(比如我自己...)。
二 题目描述
三 题目解析
3.1 示例
示例 1:
输入:n = 12
输出:3
解释:12 = 4 + 4 + 4
对照题目,12由3个平方数:4 加和得到,所以完全平方数的最少数量是3,故输出为3.
3.2 动态规划解法
既然是典型的动态规划问题,就先考虑动态规划解决。最重要的也就是定义状态转移方程了。f[i] 表示最少需要多少个数的平方来表示整数 i。f[i]的取值一定会是在 [1, √
状态转移方程:

边界条件,也就是当i=0时,
Java版代码如下:
public int numSquares(int n) {
int[] f = new int[n + 1];
for (int i = 1; i <= n; i++) {
int minn = Integer.MAX_VALUE;
for (int j = 1; j * j <= i; j++) {
minn = Math.min(minn, f[i - j * j]);
}
f[i] = minn + 1;
}
return f[n];
}