先把传入的数字开平方根,然后向下取整,这样就可以获取到一个最大的完全平方数 然后减去这个数的平方,直到传入的数字为0 这样就可以获取一组完全平方数
但是这样不一定是最少的 不过我们已经得到了最大的完全平方数,所以再用比这个小的数字依次用上面的逻辑得到多组数据,最后取最小的
提醒: 上面的操作在输入的数字叫大的时候会出现内存超出, 因为最后一组会是很多个1相加,为了避免 就从 n >= 4 开始 ,在这之前的就直接 return n 就好
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
function numSquares( n ) {
// write code here
function Squares (n, max) {
let res = []
while (n) {
let sqrt = Math.min(Math.sqrt(n),max)
let num = (Math.floor(sqrt) * Math.floor(sqrt))
n -= num
res.push(num)
}
return res.length
}
if (n < 4) return n
let maxSqrt = Math.sqrt(n)
let lengthArr = []
while (maxSqrt > 1) {
lengthArr.push(Squares(n,maxSqrt))
maxSqrt--
}
return Math.min(...lengthArr)
}
module.exports = {
numSquares : numSquares
};