原题链接:
https://leetcode.cn/problems/perfect-squares/description/
完成情况:
解题思路:
这段代码是一个解决问题的类,其中包含一个方法 numSquares
,该方法接受一个整数 n
作为参数,并返回一个整数。该方法的作用是计算将整数 n
表示为完全平方数之和所需的最小数量。
代码中首先创建了一个长度为 n+1
的整型数组 f
,用于存储每个整数 i
对应的最小数量。然后使用两个循环,外循环遍历从 1 到 n
的每个整数 i
,内循环遍历从 1 开始的完全平方数 j
直到小于等于 i
。在内循环中,计算当前整数 i
减去完全平方数 j*j
对应的最小数量,并将其与当前最小值 minn
比较并取最小值。最后将 minn+1
赋值给数组 f
中的 i
索引位置,表示整数 i
的最小数量。
最后返回数组 f
中索引为 n
的值,即整数 n
表示为完全平方数之和所需的最小数量。
参考代码:
package leetcode板块;
public class _279完全平方数 {
/**
* dp去模拟1 -> n之间所有数的遍历情况
* @param n
* @return
*/
public int numSquares(int n) {
int [] dp_numSquares = new int[n + 1];
for (int i = 1; i < dp_numSquares.length; ++i){
//逐个数去寻找最合适的dp值
//每一轮都确保能寻找到最合适的最小值
int curMin = Integer.MAX_VALUE;
for (int j = 1; j*j <= i; ++j){
curMin = Math.min(curMin,dp_numSquares[i - j * j]);
}
//因为按照上述条件,初始时,赋予的值是0
dp_numSquares[i] = curMin+1;
}
return dp_numSquares[n];
}
}