单页淘宝客网站模板,邯郸住宅与房地产信息网,wordpress随机评论头像,深圳定制衣柜厂家给你一个整数 n #xff0c;返回 和为 n 的完全平方数的最少数量 。
完全平方数 是一个整数#xff0c;其值等于另一个整数的平方#xff1b;换句话说#xff0c;其值等于一个整数自乘的积。例如#xff0c;1、4、9 和 16 都是完全平方数#xff0c;而 3 和 11 不是。
…给你一个整数 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 1 0 4 1 n 10^4 1n104 思路动态规划
f[i] 表示最少需要多少个数的平方来表示整数 i对于当前 i计算对应的 f[i] 的状态转移方程 可以看组成 i 的完全平方数的最后一个数假设为 j显然f[i] f[i - j * j] 11 代表最后一个数为 j可以枚举所有可能的 j 求出数量最少的 f[i]即组成 i 所用最少的完全平方数取最小的一个即有 f[i] min(f[i], f[i - j * j] 1); 注意初始时需要将 f 全部位置初始化为最大值f[0] 0
class Solution {
public:int f[10010];int numSquares(int n) {memset(f, 0x3f, sizeof f);f[0] 0;for(int i 1; i n; i){for(int j 1; j * j i; j){f[i] min(f[i], f[i-j*j] 1);}}return f[n];}
};