lifeiteng

417. Pacific Atlantic Water Flow

Sep 17th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.36 KB | None | 0 0
  1. class Solution {
  2.     public List<int[]> pacificAtlantic(int[][] matrix) {
  3.         List<int[]> list = new ArrayList<>();
  4.         if(matrix == null || matrix.length < 1 || matrix[0].length < 1) return list;
  5.         int m = matrix.length, n = matrix[0].length;
  6.         int[][] f = new int[m][n];
  7.         for(int i = 0; i < m; i++)
  8.         {
  9.             fill(matrix, i, 0, f, 0);
  10.             fill(matrix, i, n - 1, f, 1);
  11.         }
  12.         for(int j = 0; j < n; j++)
  13.         {
  14.             fill(matrix, 0, j, f, 0);
  15.             fill(matrix, m - 1, j, f, 1);
  16.         }
  17.        
  18.         for(int i = 0; i < m; i++)
  19.         {
  20.             for(int j = 0; j < n; j++)
  21.             {
  22.                 if(f[i][j] == 3) list.add(new int[]{i, j});
  23.                
  24.             }
  25.         }
  26.         return list;
  27.     }
  28.    
  29.  
  30.     void fill(int[][] matrix, int i, int j, int[][] f, int source)
  31.     {
  32.         int m = matrix.length, n = matrix[0].length, inf = Integer.MAX_VALUE;
  33.         int[] dx = {1, 0, -1, 0}, dy = {0, 1, 0, -1};
  34.         if((f[i][j] & (1 << source)) != 0) return;
  35.         f[i][j] |= 1 << source;
  36.         for(int k = 0; k < 4; k++)
  37.         {
  38.             int ni = i + dx[k], nj = j + dy[k];
  39.             if(ni < 0 || nj < 0 || ni >= m || nj >= n || matrix[ni][nj] < matrix[i][j]) continue;
  40.             fill(matrix, ni, nj, f, source);
  41.         }
  42.     }
  43. }
Advertisement
Add Comment
Please, Sign In to add comment