iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0

今天出去玩,買了好多東西,只想趕快把這篇趕出來。

DFS:碰到一個新節點時,先從這個新節點開始往下做,所以用 FILO 的 stack or 等價的遞迴來做。
通常是走遍 matrix,但 tree 的 3 種 traversal 也算是 dfs

  1. 通常外層來判斷哪個位置開始要做 dfs,
    然後再 call 內層的 dfs function
for 所有元素:
    if 條件成立:
        dfs(x, y)
  1. 紀錄 visited
    通常會需要紀錄已經拜訪的元素,或是更改原來的元素做標記,以避免重複訪問造成無窮迴圈
    額外紀錄 visited 會佔空間,但面試時要先釐清是否可以更改原先的 input。

  2. 判斷 bound
    個人習慣是
    遞迴時:無論如何先走下一步,再從最前面的 basic case 判斷是否越界
    迭代時:先判斷下一步是否越界,才決定是否加進 stack。

  3. 方向
    若是經典的走 matrix 的四個方向,可以用 directions = [-1, 0, 1, 0, -1],每相臨兩個代表一個方向。

695. Max Area of Island (Medium)
79. Word Search (Medium)

dfs 的實作,包含怎麼利用已經找到的結果(例如 79),都會影響整體速度。
可以多參考別人的 code 測看看哪裡比較快,
而且因為模式都很相像,可以寫一個自己最喜歡的版本的 pseudo code,方便以後把熟悉度練上去。

小結

.. 好想睡覺ㄛ
本來想寫 trie 和 graph 卻一直拖


上一篇
【LeetCode】Monotonic Stack
下一篇
【LeetCode】Backtracking
系列文
快樂社畜路:畢業後的後端開發求職準備31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言