java输入一个正整数 n ,输出和为 n 的完全平方数(1,4,9,16......)的最少数量 。例如n=12,n = 4+4+4,所以结果为3;n = 13,n = 4+9,结果为2。
时间: 2024-05-15 14:12:44 浏览: 80
Java经典编程题-学生.doc
这个问题可以使用动态规划算法来解决。假设我们已经知道了对于所有小于n的正整数,它们的最少完全平方数数量,我们可以用这些结果来计算n的结果。
我们可以定义一个长度为n+1的数组dp,其中dp[i]表示和为i的完全平方数的最少数量。显然,dp[0]=0,因为和为0的完全平方数数量为0。对于其他的i,我们可以通过以下方式来计算dp[i]:
1.初始化dp[i]为i,这是最坏情况下的答案,即由i个1组成。
2.遍历所有小于等于i的完全平方数j,计算dp[i-j*j]+1的值,并将其与当前的dp[i]比较。如果dp[i-j*j]+1小于dp[i],则更新dp[i]的值。
3.返回dp[n]作为答案。
下面是Java代码实现:
```java
public static int getMinSquareNum(int n) {
int[] dp = new int[n + 1];
dp[0] = 0;
for (int i = 1; i <= n; i++) {
dp[i] = i;
for (int j = 1; j * j <= i; j++) {
dp[i] = Math.min(dp[i], dp[i - j * j] + 1);
}
}
return dp[n];
}
```
测试:
```java
public static void main(String[] args) {
System.out.println(getMinSquareNum(12)); // 输出3
System.out.println(getMinSquareNum(13)); // 输出2
}
```
阅读全文