Java実装LeetCode 542 01マトリックス(便宜の暴力大法、長所と短所)

542.01行列

0と1からなる行列が与えられると、各要素は、最も近いゼロを検索します。

二つの隣接するエレメント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 0 1
。1。1。1
出力:

0 0 0
0 0 1
1 1 2。
注:

行列の要素の所定数は1万人以上ではありません。
マトリックス内の指定された少なくとも一つの要素がゼロです。
4つの方向に隣接する唯一の行列要素:上、下、左、右。

class Solution {
    private int row;
    private int col;
    private int[][] vector = new int[][]{{0, 1}, {0, -1}, {1, 0}, {-1, 0}};

    /**
     * DP(两次遍历,可 AC)
     */
    public int[][] updateMatrix(int[][] matrix) {
        row = matrix.length;
        col = matrix[0].length;
        // 第一次遍历,正向遍历,根据相邻左元素和上元素得出当前元素的对应结果
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (matrix[i][j] == 1) {
                    matrix[i][j] = row + col;
                }
                if (i > 0) {
                    matrix[i][j] = Math.min(matrix[i][j], matrix[i - 1][j] + 1);
                }
                if (j > 0) {
                    matrix[i][j] = Math.min(matrix[i][j], matrix[i][j - 1] + 1);
                }
            }
        }
        // 第二次遍历,反向遍历,根据相邻右元素和下元素及当前元素的结果得出最终结果
        for (int i = row - 1; i >= 0; i--) {
            for (int j = col - 1; j >= 0; j--) {
                if (i < row - 1) {
                    matrix[i][j] = Math.min(matrix[i][j], matrix[i + 1][j] + 1);
                }
                if (j < col - 1) {
                    matrix[i][j] = Math.min(matrix[i][j], matrix[i][j + 1] + 1);
                }
            }
        }
        return matrix;
    }
}
リリース1629元の記事 ウォンの賞賛20000 + ビュー276万+

おすすめ

転載: blog.csdn.net/a1439775520/article/details/105089759