Java aplicación LeetCode problema del agua 417 Atlantic Pacific

417. problema del agua del Atlántico del Pacífico

Dado un número entero no negativo matriz mxn representa la altura de una célula individual en el continente. "Pacific" en la izquierda y en la frontera del continente, y "Atlántico" en la orilla derecha del continente y el límite inferior.

Sólo de acuerdo con una dirección predeterminada de flujo hacia arriba, abajo, izquierda y derecha de la corriente, o de alto a bajo y sólo puede fluir en la misma altura.

Por favor identifique los agua puede fluir tanto a "Pacífico", sino también para coordinar el flujo de la unidad de tierra "Atlántico".

consejos:

El orden no importa coordenadas de salida
M y N son menos de 150

Ejemplo:

Dada la matriz 5x5 siguiente:

  太平洋 ~   ~   ~   ~   ~ 
       ~  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  *
          *   *   *   *   * 大西洋

Devuelve:

[[0, 4], [1, 3], [1, 4], [2, 2], [3, 0], [3, 1], [4, 0]] (la figura anterior en paréntesis medios).

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);
        }
    }
 
}
Liberadas 1532 artículos originales · ganado elogios 20000 + · vistas 2,08 millones +

Supongo que te gusta

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