959. Regions Cut By Slashes
In a N x N grid composed of 1 x 1 squares, each 1 x 1 square consists of a /, , or blank space.These characters divide the square into contiguous regions.
(Note that backslash characters are escaped, so ais represented as "\".)
Return the number of regions.
Example 1:
Input:
[
" /",
"/ "
]
Output: 2
Explanation: The 2x2 grid is as follows:
Example 2:
Input:
[
" /",
""
]
Output: 1
Explanation: The 2x2 grid is as follows:
Example 3:
Input:
[
"\/",
"/\"
]
Output: 4
Explanation: (Recall that becausecharacters are escaped, "\/" refers to /, and "/\" refers to /.)
The 2x2 grid is as follows:
Example 4:
Input:
[
"/\",
"\/"
]
Output: 5
Explanation: (Recall that becausecharacters are escaped, "/\" refers to /, and "\/" refers to /.)
The 2x2 grid is as follows:
Example 5:
Input:
[
"//",
"/ "
]
Output: 3
Explanation: The 2x2 grid is as follows:
Note:
1 <= grid.length == grid[0].length <= 30
gridi is either '/', '', or ' '.
難度:medium
題目:
給定一個由1X1的方塊組成的網格,每個方塊由/‘ ’(空字元) 3 個元素組成,這些元素將大方塊分成若干小的連續區域。求連續區域的個數。
思路:
將每個小方格用3 X 3的0、1陣列表示。因此題目就轉成了0、1矩陣中求0的連續區域個數。
/ 轉換成
001
010
100
轉換成
100
010
001
‘ ’ 轉換成
000
000
000
Runtime: 12 ms, faster than 85.37% of Java online submissions for Regions Cut By Slashes.
class Solution { /** *001 * / -> 010 *100 * *100 * \ -> 010 *001 * *000 * ' '->000 *000 * * convert to find the isolated 0s by 1 */ public int regionsBySlashes(String[] grid) { int row = grid.length; int trippleRow = 3 * row; int[][] iGrid = new int[trippleRow][trippleRow]; for (int i = 0; i < trippleRow; i += 3) { char[] sc = grid[i / 3].toCharArray(); for (int j = 0; j < trippleRow; j += 3) { char c = sc[j / 3]; if ('/' == c) { iGrid[i][j + 2] = iGrid[i + 1][j + 1] = iGrid[i + 2][j] = 1; } else if ('\\' == c) { iGrid[i][j] = iGrid[i + 1][j + 1] = iGrid[i + 2][j + 2] = 1; } } } int count = 0; for (int i = 0; i < trippleRow; i++) { for (int j = 0; j < trippleRow; j++) { if (0 == iGrid[i][j]) { colorGrid(iGrid, i, j); count++; } } } return count; } private void colorGrid(int[][] grid, int i, int j) { grid[i][j] = 1; // up if (0 == grid[Math.max(i - 1, 0)][j]) { colorGrid(grid, i - 1, j); } // down if (0 == grid[Math.min(i + 1, grid.length - 1)][j]) { colorGrid(grid, i + 1, j); } // left if (0 == grid[i][Math.max(j - 1, 0)]) { colorGrid(grid, i, j - 1); } // right if (0 == grid[i][Math.min(j + 1, grid[0].length - 1)] ) { colorGrid(grid, i, j + 1); } } }