【leetcode】79. 完全平方数

64 阅读1分钟

leetcode-279.png

动态规划

i - j * j尝试所有小于i的元素的完全平方数,dp[i - j * j] + 1来更新当前的次数 状态转移方程

dp[i] = Math.min(dp[i], dp[i - j * j] + 1)
var numSquares = function(n) {
    // 创建一个长度为 n+1 的 dp 数组,并初始化为正无穷大
    let dp = new Array(n + 1).fill(Infinity);
    // 0 需要 0 个完全平方数
    dp[0] = 0;

    // 从 1 遍历到 n
    for (let i = 1; i <= n; i++) {
        // 尝试所有小于等于 i 的完全平方数
        for (let j = 1; j * j <= i; j++) {
            dp[i] = Math.min(dp[i], dp[i - j * j] + 1);
        }
    }

    // 返回 dp[n],即组成 n 的最少完全平方数个数
    return dp[n];
};