leetcode 由斜槓劃分區域

2021-10-05 20:17:34 字數 3144 閱讀 6851

在由 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 網格如下:

grid[i][j] 是 『/』、』』、或 』 '。

這道題本質上是計算連通分量個數,難點在於理解題意以及確定哪些元素是相連的.

理解題意:

題目使用字串表示對正方形的劃分,若grid.length == n,則表示將當前單元格劃分為n

2n^2

n2個小正方形單元格,然後在將每乙個小正方形單元格劃分兩個三角形.如果使用/劃分,則當前小正方形被劃分為左上,右下兩個三角形,如果使用\劃分,則當前三角形被劃分為左下,右上兩個三角形.如果使用空格,則表示不對當前小正方形進行劃分.題目要求判斷劃分的區域個數,實際上就是要求計算所有小三角形中的連通分量個數.

判斷連通性:

注意到乙個小三角形可能屬於一下四種方位之一,左下,左上,右下,右上.對於未被劃分的小三角形,可以將其視作左上,右下劃分,不過這兩個小三角形是連通的.如果當前小正方形使用/\劃分,則被劃分後的兩個小三角形不是連通的.對於每乙個小三角形,除與其位於同一正方形的三角形外,其最多與周圍兩個三角形連通.例如,位於左下的三角形,如果其左側有正方形,則其與左側正方形的乙個三角形相連通(右上或右下),如果其下方有正方形,則其餘下方正方形的乙個三角形相連通(左上或右上).

在理解以上兩點後,我們便可以考慮如何計算圖中的連通分量個數,此處我們使用並查集計算圖中的連通分量個數.

class

solution

//判斷給定的方位是否為左側,左上或左下

private

boolean

isleft

(int x)

private

boolean

isright

(int x)

private

boolean

isup

(int x)

private

boolean

isdown

(int x)

//使用並查集將當前位置grid[i][j][k]處的三角形與其相鄰的兩個三角形進行相連

private

void

unionadj

(unionfind uf,

int[

] grid,

int i,

int j,

int k)

if(i >0)

}else

if(grid[i]

[j][k]

== left_down)

if(i < grid.length-1)

}else

if(grid[i]

[j][k]

== right_up)

if(j < grid.length-1)

}else

if(grid[i]

[j][k]

== right_down)

if(j < grid.length-1)

}}//定義並查集類

class

unionfind

public

intfind

(int i)

public

void

union

(int i,

int j)

count--

;//連通分量減1

}public

intcount()

}public

intregionsbyslashes

(string[

] grid)

else

if(grid[i]

.charat

(j)==

' ')

else}}

//並查集連線

for(

int i =

0; i < grid.length; i++)}

return uf.

count();}}

leetcode 959 由斜槓劃分區域

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

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...