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++
    }
};
posted @ 2021-12-09 14:03  BONiii  阅读(36)  评论(0)    收藏  举报