279.完全平方数
给你一个整数 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
题解:
本题也是一个完全背包的运用场景。n只能由完全平方数构成,也就是只能由 1 ~ floor(sqrt(n))
,这个范围的数的平方。文章来源:https://www.toymoban.com/news/detail-853117.html
那么物品就相当于是这1~floor(sqrt(n))
个数,物品的重量相当于平方,物品的价值相当于1,背包容量相当于本题的n。求装满背包的最低价值是多少,代码如下:文章来源地址https://www.toymoban.com/news/detail-853117.html
package com.offer;
import com.amazonaws.services.dynamodbv2.xspec.M;
/**
* 给你一个整数 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
* @author bwzfy
* @create 2024/4/15
**/
public class _279完全平方数 {
public static void main(String[] args) {
System.out.println(numSquares(12));
}
public static int numSquares(int n) {
int max = (int) Math.floor(Math.sqrt(n));
// 1 ~ max, 1 ~ n
int[] dp = new int[n + 1];
for (int i = 1; i < n + 1; i++) {
dp[i] = i;
}
for (int i = 2; i < max + 1; i++) {
for (int j = 2; j < n + 1; j++) {
if (i * i <= j) {
dp[j] = Math.min(dp[j], dp[j - i * i] + 1);
}
}
}
return dp[n];
}
}
到了这里,关于动态规划专练( 279.完全平方数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!