Re: [閒聊] 每日LeetCode

作者: Rushia (みけねこ的鼻屎)   2023-02-27 16:14:07
427. Construct Quad Tree
給你一個矩陣grid請用一個四元樹來表示他,四元樹的節點結構如下所示:
class Node {
public boolean val;
public boolean isLeaf;
public Node topLeft;
public Node topRight;
public Node bottomLeft;
public Node bottomRight;
}
val: 表示這個區塊的值,true = 1 false = 0
isLeaf: 表示這個區塊是否所有元素都一樣
Example:
Input: grid =
[[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0],[1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1],[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0]]
Output:
[[0,1],[1,1],[0,1],[1,1],[1,0],null,null,null,null,[1,0],[1,0],[1,1],[1,1]]
Explanation: All values in the grid are not the same. We divide the grid into
four sub-grids.
The topLeft, bottomLeft and bottomRight each has the same value.
The topRight have different values so we divide it into 4 sub-grids where
each has the same value.
Explanation is shown in the photo below:
https://assets.leetcode.com/uploads/2020/02/12/e2mat.png
思路:
1.四元樹是一個很特別的資料結構,如果矩陣的(x1,y1)到(x2,y2)區域的所有元素
都是0或1的話這個節點就是一個葉節點,可以用一個節點來表示,如果不是的話
,我們會將這個區域平均切成四個等分,再繼續判斷他是否所有元素都一樣,
從上面的說明我們可以觀察出來建構四元樹是有遞迴關係的。
2.這邊使用dfs來建構四元樹,定義dfs(y1, x1, y2, x2)返回一個從(x1,y1)到(x2,y2)
區域所構建出來的四元樹,可以分成兩種情況:
(1)這個區域的所有元素都相同:直接返回一個葉節點,節點的值就是這個元素。
(2)這個區域存在某個元素不相同:將當前區域均分成四等分往四個區塊繼續遞迴。
3.遞迴到底之後就可以構建出四元樹了。
Java Code:
作者: SuiseiLeda (星街雷達)   2023-02-27 16:16:00
四元樹是啥
作者: Firstshadow (IamCatづミ'_'ミづ)   2023-02-27 16:16:00
大師
作者: DDFox (冒險者兼清潔工)   2023-02-27 16:16:00
大師
作者: pandix (麵包屌)   2023-02-27 16:31:00
大師
作者: idiont (supertroller)   2023-02-27 16:41:00
我好像以前在其他OJ寫過一模一樣的題目
作者: pandix (麵包屌)   2023-02-27 16:47:00
感覺先遞迴建子node再檢查是不是全部元素都一樣比較好
作者: Che31128 (justjoke)   2023-02-27 16:59:00
大師

Links booklink

Contact Us: admin [ a t ] ucptt.com