uni做网站首页,城阳天河小学网站建设,有赞商城商家版,卫生监督 网站建设方案279.完全平方数
给你一个整数 n #xff0c;返回 和为 n 的完全平方数的最少数量 。
完全平方数 是一个整数#xff0c;其值等于另一个整数的平方#xff1b;换句话说#xff0c;其值等于一个整数自乘的积。例如#xff0c;1、4、9 和 16 都是完全平方数#xff0c;而 …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))这个范围的数的平方。
那么物品就相当于是这1~floor(sqrt(n))个数物品的重量相当于平方物品的价值相当于1背包容量相当于本题的n。求装满背包的最低价值是多少代码如下
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 ~ nint[] 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];}
}