leetcode279.完全平方数
leetcode279.完全平方数
题目
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。
用例
输入:n = 12
输出:3
解释:12 = 4 + 4 + 4
输入:n = 13
输出:2
解释:13 = 4 + 9
求解
/**
* @param {number} n
* @return {number}
*/
var numSquares = function(n) {
let res_sum = []
let res=1
let p=-1
let q=-1
let layer_last = p
//如果q还没有到树的尾部
while(q<res_sum.length){
//初始化
if(q==-1){
let num = Math.floor(Math.sqrt(n))
for(let i=num;i>0;i--){
//如果剩余有等于0的,则返回当前层数
if((n-i*i)==0){
return res
}
//存入树中
res_sum.push(n-i*i)
//末尾指针增加
p++
}
//layer_last记录当前层最后一个节点
layer_last=p
res++
}else{
let num = Math.floor(Math.sqrt(res_sum[q]))
for(let i=num;i>0;i--){
if((res_sum[q]-i*i)==0){
return res
}
res_sum.push(res_sum[q]-i*i)
p++
}
if(q==layer_last){
layer_last=p
res++
}
}
q++
}
};

浙公网安备 33010602011771号