【leetcode】#542.01 給定一個由 0 和 1 組成的矩陣,找出每一個元素到最近的 0 的距離

題目描述:

給定一個由 0 和 1 組成的矩陣,找出每一個元素到最近的 0 的距離。
兩個相鄰元素間的距離爲 1 。
示例 1:
輸入:

0 0 0
0 1 0
0 0 0
輸出:

0 0 0
0 1 0
0 0 0
示例 2:
輸入:

0 0 0
0 1 0
1 1 1
輸出:

0 0 0
0 1 0
1 2 1
注意:
給定矩陣的元素個數不超過 10000。
給定矩陣中至少有一個元素是 0。
矩陣中的元素只在四個方向上相鄰: 上、下、左、右。

1、建立矩陣

示例:建立一個根據行列,建立數組,並填入數字;數組

let col = 3; //列數
let row = 3; //行數
let matrix = []; //建立一個數組存儲空間
let num = 1;  //填入的值
for(let i=0;i<row;i++){
    matrix[i] = [];  //建立三維數組行空間
    for(let j=0;j<col;j++){
        matrix[i][j]=num; //填入數字
         num++; 
    }
}
輸出:
[
    [1,2,3],
    [4,5,6],
    [7,8,9],
]

1、實參替換形參中不爲0的值,保留爲0的值

//實參替換形參中不爲0的值,保留爲0的值
var updateMatrix = function(matrix) {
        let row = matrix.length; //獲取矩陣的行數
        let col = matrix[0].length; //獲取矩陣的列    
    var temp = [];//建立一個數組存儲空間
    for(var i = 0; i < row; i++){
        temp[i] = [];
        for(var j = 0 ; j < col; j++){
          if (matrix[i][j] == 0) {
            temp[i][j] = 0;
          }else{
            temp[i][j] = Number.MAX_SAFE_INTEGER; //值過大防止內存溢出
          }
       }
    }
}

輸出:spa

[
    [0,0,0],
    [0,9007199254740991,0],
    [9007199254740991,9007199254740991,9007199254740991],
    [9007199254740991,9007199254740991,9007199254740991],
]

2、根據實參矩陣修改矩陣中爲0的值

2.1此時從左至右從上至下,各元素只與上左元素做比較
for (var i = 0; i < row; i++){
    for (var j = 0; j < col; j++){ //此時從左至右從上至下,各元素只與上左元素做比較
        if (j > 0)
            temp[i][j] = Math.min(temp[i][j - 1] + 1, temp[i][j]); //左邊元素加1若小則取之
        if (i > 0)
            temp[i][j] = Math.min(temp[i - 1][j] + 1, temp[i][j]); //上邊元素加1若小則取之    
    }
}

輸出:code

[
    [ 0, 0, 0 ],
    [ 0, 1, 0 ],
    [ 1, 2, 1 ],
    [ 2, 3, 2 ]  
]
2.2 此時從右至左從下至上,各元素可與下右元素做比較
for (var i = row - 1; i >= 0;i--){
    for (var j = col - 1; j >= 0; j--) { //此時從右至左從下至上,各元素可與下右元素做比較
        if (j < col - 1)
            temp[i][j] = Math.min(temp[i][j + 1] + 1, temp[i][j]); //左邊元素加1若小則取之
        if (i < row - 1)
            temp[i][j] = Math.min(temp[i + 1][j] + 1, temp[i][j]); //上邊元素加1若小則取之    
    }
 }

輸出blog

[
        [ 0, 0, 0 ],
        [ 0, 1, 0 ],
        [ 1, 2, 1 ],
        [ 2, 3, 2 ],
    ]

解題代碼:

var updateMatrix = function(matrix) {
    //步驟一
    let row = matrix.length; //獲取矩陣的行數
    let col = matrix[0].length; //獲取矩陣的列
    var temp = [];//建立一個數組存儲空間
    for(var i = 0; i < row; i++){
        temp[i] = [];
        for(var j = 0 ; j < col; j++){
            if (matrix[i][j] == 0) {
                temp[i][j] = 0;
            }else{
                /* 值過大防止內存溢出 */
                temp[i][j] = Number.MAX_SAFE_INTEGER;
            }
        }
    }
            
    //步驟二
    for (var i = 0; i < row; i++){
        for (var j = 0; j < col; j++){ //此時從左至右從上至下,各元素只與上左元素做比較
            if (j > 0)
                /* 左邊元素加1若小則取之 */
                temp[i][j] = Math.min(temp[i][j - 1] + 1, temp[i][j]); 
            if (i > 0)
                /* 上邊元素加1若小則取之 */
                temp[i][j] = Math.min(temp[i - 1][j] + 1, temp[i][j]);    
        }
    }
                
    //步驟三
    for (var i = row - 1; i >= 0;i--){
        for (var j = col - 1; j >= 0; j--) { //此時從右至左從下至上,各元素可與下右元素做比較
            if (j < col - 1)
                /* 左邊元素加1若小則取之 */
                temp[i][j] = Math.min(temp[i][j + 1] + 1, temp[i][j]); 
            if (i < row - 1)
                /* 上邊元素加1若小則取之 */
                temp[i][j] = Math.min(temp[i + 1][j] + 1, temp[i][j]);   
        }
    } 
    return temp;
};

圖片.png

相關文章
相關標籤/搜索