Java implementação LeetCode problema da água 417 Atlantic Pacific

problema da água 417. Atlantic Pacific

Dado um número inteiro não negativo matriz mxn representa a altura de uma célula individual no continente. "Pacific" na esquerda e na fronteira do continente, e "Atlantic" na margem direita do continente e o limite inferior.

Apenas de acordo com uma predeterminada direcção de fluxo para cima, para baixo, para a esquerda e para a direita do fluxo, ou de alta para baixa e só pode fluir na mesma altura.

Por favor, identifique aqueles que a água pode fluir tanto para "Pacific", mas também para coordenar o fluxo de unidade de terra "Atlantic".

dicas:

A ordem não importa coordenadas de saída
de m e n são menos do que 150

exemplo:

Dada a seguinte matriz 5x5:

  太平洋 ~   ~   ~   ~   ~ 
       ~  1   2   2   3  (5) *
       ~  3   2   3  (4) (4) *
       ~  2   4  (5)  3   1  *
       ~ (6) (7)  1   4   5  *
       ~ (5)  1   1   2   4  *
          *   *   *   *   * 大西洋

retorna:

[[0, 4] [1, 3], [1, 4], [2, 2], [3, 0], [3, 1], [4, 0]] (figura acima em parênteses meios).

class Solution {
         private int row, col;
    private int[][] grid;
    private List<List<Integer>> result = new ArrayList<>();

    public List<List<Integer>> pacificAtlantic(int[][] matrix) {
        row = matrix.length;
        if (row == 0) {
            return result;
        }
        col = matrix[0].length;
        grid = new int[row][col];
        for (int i = 0; i < row; i++) {
            helper(matrix, i, 0, 1);
        }
        for (int j = 0; j < col; j++) {
            helper(matrix, 0, j, 1);
        }
        for (int i = 0; i < row; i++) {
            helper(matrix, i, col - 1, 2);
        }
        for (int j = 0; j < col; j++) {
            helper(matrix, row - 1, j, 2);
        }
        return result;
    }

    private void helper(int[][] matrix, int i, int j, int v) {
        if (grid[i][j] == v || grid[i][j] == 3) {
            return;
        }
        grid[i][j] += v;
        if (grid[i][j] == 3) {
            List<Integer> temp = new ArrayList<>();
            temp.add(i);
            temp.add(j);
            result.add(temp);
        }
        if (i != 0 && matrix[i - 1][j] >= matrix[i][j]) {
            helper(matrix, i - 1, j, v);
        }
        if (j != 0 && matrix[i][j - 1] >= matrix[i][j]) {
            helper(matrix, i, j - 1, v);
        }
        if (i != row - 1 && matrix[i + 1][j] >= matrix[i][j]) {
            helper(matrix, i + 1, j, v);
        }
        if (j != col - 1 && matrix[i][j + 1] >= matrix[i][j]) {
            helper(matrix, i, j + 1, v);
        }
    }
 
}
Lançado 1532 artigos originais · ganhou elogios 20000 + · vistas 2,08 milhões +

Acho que você gosta

Origin blog.csdn.net/a1439775520/article/details/104878984
Recomendado
Clasificación