力扣134場周賽 5040 邊框著色

2021-09-20 06:20:40 字數 1448 閱讀 7695

給出乙個二維整數網格 grid,網格中的每個值表示該位置處的網格塊的顏色。 只有當兩個網格塊的顏色相同,而且在四個方向中任意乙個方向上相鄰時,它們屬於同一連通分量。 連通分量的邊界是指連通分量中的所有與不在分量中的正方形相鄰(四個方向上)的所有正方形,或者在網格的邊界上(第一行/列或最後一行/列)的所有正方形。給出位於 (r0, c0) 的網格塊和顏色 color,使用指定顏色 color 為所給網格塊的連通分量的邊界進行著色,並返回最終的網格 grid 。

示例 1:

輸入:grid = [[1,1],[1,2]], r0 = 0, c0 = 0, color = 3

輸出:[[3, 3], [3, 2]]

示例 2:

輸入:grid = [[1,2,2],[2,3,2]], r0 = 0, c0 = 1, color = 3

輸出:[[1, 3, 3], [2, 3, 3]]

示例 3:

1 <= grid.length <= 50

1 <= grid[0].length <= 50

1 <= grid[i][j] <=1000

0 <= r0 < grid.length

0 <= c0 < grid[0].length

1 <= color <= 1000

解題思路:

從(r0,c0)開始,深度優先搜尋其聯通分量並標記。

通過標記來確定聯通分量的邊界,改變聯通分量的邊界。

class zb

} public int colorborder(int grid, int r0, int c0, int color)

}//下

int bomx = zb.x;

int bomy = zb.y+1;

if(isvalid(bomx,bomy,grid))

}//左

int leftx = zb.x-1;

int lefty = zb.y;

if(isvalid(leftx,lefty,grid))

}//右

int rightx = zb.x+1;

int righty = zb.y;

if(isvalid(rightx,righty,grid))}}

for(int i=0;i0&&i0&&j=0&&topx<=row)

if(topy>=0&&topy<=col)

return true;

return false;

}

後來想了想,其實可以在尋找聯通區域的過程中就確定邊界:如果該點上下左右的點都有效(都在grid中),且上下左右的點的顏色都與grid[r0][c0]初始的顏色相同,則不是邊界點。否則就是邊界點,是邊界點就改變其顏色為color。

力扣第165場周賽

a 和 b 在乙個 3 x 3 的網格上玩井字棋。井字棋遊戲的規則如下 玩家輪流將棋子放在空方格 上。第乙個玩家 a 總是用 x 作為棋子,而第二個玩家 b 總是用 o 作為棋子。x 和 o 只能放在空方格中,而不能放在已經被占用的方格上。只要有 3 個相同的 非空 棋子排成一條直線 行 列 對角線...

力扣第 202 場周賽

傳送門 5185 存在連續三個奇數的陣列 給你乙個整數陣列 arr,請你判斷陣列中是否存在連續三個元素都是奇數的情況 如果存在,請返回 true 否則,返回 false 示例 1 輸入 arr 2,6,4,1 輸出 false 解釋 不存在連續三個元素都是奇數的情況。示例 2 輸入 arr 1,2,...

力扣第 221 場周賽

class solution def halvesarealike self,s str bool score a e i o u a e i o u a s len s 2 b s len s 2 sa 0for ch in a if ch in score sa 1 sb 0for ch in ...