Skip to content
On this page

完全平方数

TIP

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量

**完全平方数 **是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,14916 都是完全平方数,而 311 不是。

思路

js
var numSquares = function(n) {
    //构造完全平方数数组,根据题目给出的 n 的范围
    let coins = []
    for(let i=0;i<=100;i++){
        coins.push(i*i)
    }
    console.log(coins)
    //下面的解法和 “零钱兑换” 几乎相同
    const INT_MAX = 10e4+5
    let dp = Array(n + 1).fill(INT_MAX)
    let res = []
    dp[0] = 0
    for(let i=0;i<coins.length;i++){
        for(let j=coins[i];j<=n;j++){
            if( dp[j-coins[i]] != INT_MAX) 
                dp[j] = Math.min(dp[j-coins[i]]+1, dp[j])
        }
        res.push([...dp])
    }
    console.log(res)
    return dp[n]!=INT_MAX?dp[n]:-1
};