leetcode 959 由斜槓劃分區域

2021-10-25 13:41:10 字數 3429 閱讀 5596

目錄

一、題目內容

二、解題思路

三、**

在由 1 x 1 方格組成的 n x n 網格 grid 中,每個 1 x 1 方塊由 /、\ 或空格構成。這些字元會將方塊劃分為一些共邊的區域。(請注意,反斜槓字元是轉義的,因此 \ 用 "\\" 表示。)。返回區域的數目。

示例 1:輸入:[" /",

"/ "

]輸出:2

解釋:2x2 網格如下:

示例 2:輸入:[" /",

"  "

]輸出:1

解釋:2x2 網格如下:

示例 3:輸入:["\\/",

"/\\"

]輸出:4

解釋:(回想一下,因為 \ 字元是轉義的,所以 "\\/" 表示 \/,而 "/\\" 表示 /\。)

2x2 網格如下:

示例 4:輸入:["/\\",

"\\/"

]輸出:5

解釋:(回想一下,因為 \ 字元是轉義的,所以 "/\\" 表示 /\,而 "\\/" 表示 \/。)

2x2 網格如下:

示例 5:輸入:["//",

"/ "

]輸出:3

解釋:2x2 網格如下:

1 <= grid.length == grid[0].length <= 30grid[i][j] 是 '/'、'\'、或 ' '。

三角形由三個邊構成,那麼三個點兩兩都連通則區域加1。

首先先將大格仔的邊上的點進行連通,然後再處理斜線『/』上的點,連通則區域加1,不連通則將兩個點進行連通,接著同樣處理『\',說白了就是三角形的頂點到達另乙個頂點既可以直接通過相連的線段到達,也可以經過除二者之外的另乙個頂點再到達。

總之連通就是這個意思~

from collections import defaultdict

class solution:

def regionsbyslashes(self, grid: list) -> int:

root = defaultdict(tuple)

def find(x):

if x != root[x]:

root[x] = find(root[x])

# return root[x]

return root[x]

# 檢測x和y是否連通

def connected(x, y):

return find(x) == find(y)

# 連通x和y

def union(x, y):

if connected(x, y) is false:

root[find(x)] = find(y)

# 儲存大格仔所有點座標

for i in range(len(grid) + 1):

for j in range(len(grid) + 1):

root[(i, j)] = (i, j)

# 左斜上三角的點進行連通

for i in range(len(grid) + 1):

union((0, 0), (0, i))

union((0, 0), (i, 0))

# 右斜下三角的點進行連通

for i in range(len(grid) + 1):

union((i, len(grid)), (len(grid), len(grid)))

union((len(grid), i), (len(grid), len(grid)))

# 這樣大格仔邊上的點都進行了連通

res = 1 # 連通區域個數

for i in range(len(grid)):

for j in range(len(grid)):

if grid[i][j] == '/':

# 小格仔的左下角和右上角之前已經連通了

if connected((i + 1, j), (i, j + 1)):

res += 1 # 個數加1

else:

# 否則小格仔的左下角和右上角進行連通

union((i + 1, j), (i, j + 1))

elif grid[i][j] == '\\':

# 小格仔的左上角和右下角之前已經連通了

if connected((i, j), (i + 1, j + 1)):

res += 1 # 個數加1

else:

# 否則小格仔的左上角和右下角進行連通

union((i, j), (i + 1, j + 1))

return res

if __name__ == '__main__':

grid = [

"/\\",

"\\/"

]s = solution()

ans = s.regionsbyslashes(grid)

print(ans)

LeetCode 959 由斜槓劃分區域

難度 中等。這個題,我不會,看別人的思路。參考 然後問題同 200.島嶼數量,遍歷0的區域。我的實現 class solution void change map int i,int j,int n public int regionsbyslashes vector grid else if gr...

leetCode 959 由斜槓劃分區域

這題的關鍵點就是如何將每個方格進行劃分,以及如何計算每個小方格的座標,然後根據每個方格的型別在方格內合併,然後再方格之間合併,最後返回連通分量的個數即可 class solution else if cur else if j 1 n if i 1 n return uf.getcount clas...

Leetcode 959 右斜槓劃分區域

在由 1 x 1 方格組成的 n x n 網格 grid 中,每個 1 x 1 方塊由 或空格構成。這些字元會將方塊劃分為一些共邊的區域。請注意,反斜槓字元是轉義的,因此 用 表示。返回區域的數目。示例 1 輸入 輸出 2 解釋 2x2 網格如下 示例 2 輸入 輸出 1 解釋 2x2 網格如下 示...