leetcode Day64 剑指专项 107-完结

62 阅读1分钟

剑指 Offer II 107. 矩阵中的距离

var updateMatrix = function(mat) {
    const m = mat.length, n = mat[0].length
    const res = Array.from({length: m}, () => new Array(n).fill(0))
    // 左上
    for (let i = 0; i < m; i++) {
        for (let j = 0; j < n; j++) {
            if (mat[i][j]) {
                res[i][j] = Math.min(
                    (res[i - 1] ? res[i - 1][j] : Infinity), 
                    (res[i][j - 1] === undefined ? Infinity : res[i][j - 1])
                ) + 1
            }
        }
    }
    // 右下
    for (let i = m - 1; i >= 0; i--) {
        for (let j = n - 1; j >= 0; j--) {
            if (mat[i][j]) {
                res[i][j] = Math.min(Math.min(
                    (res[i + 1] ? res[i + 1][j] : Infinity), 
                    (res[i][j + 1] ===undefined ? Infinity : res[i][j + 1])
                ) + 1, res[i][j])
            }
        }
    }
    return res
};

剑指 Offer 47. 礼物的最大价值

var maxValue = function(grid) {
    const m=grid.length,n=grid[0].length
    const dp=new Array(m).fill(0).map(()=>new Array(n).fill(0))
    dp[0][0]=grid[0][0]
    for(let i=1;i<m;i++){
        dp[i][0]=dp[i-1][0]+grid[i][0]
    }
    for(let j=1;j<n;j++){
        dp[0][j]=dp[0][j-1]+grid[0][j]
    }
    for(let i=1;i<m;i++){
        for(let j=1;j<n;j++){
            dp[i][j]=Math.max(dp[i-1][j],dp[i][[j-1]])+grid[i][j]
        }
    }
    return dp[m-1][n-1]
};