前往
大廳
主題

LeetCode - 980. Unique Paths III 解題心得

Not In My Back Yard | 2021-05-27 00:00:03 | 巴幣 0 | 人氣 242

題目連結:


題目意譯:
在一個二維網格 grid 中,有著 4 種方塊:
1 代表著起始方塊。只有一個會是起始方塊。
2 代表著終點方塊。只有一個會是終點方塊。
0 代表著空方塊,我們可以走在上面。
-1 代表障礙物,我們無法走上去。

回傳所有可以從起始方塊走到終點方塊且經過所有非障礙物之方塊恰好一次的走法。

注:
1 ≦ grid.length × grid[0].length ≦ 20



範例測資:
範例 1:
輸入: [[1,0,0,0],[0,0,0,0],[0,0,2,-1]]
輸出: 2
解釋: 我們有以下兩條路徑:
1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2)
2. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2)

範例 2:
輸入: [[1,0,0,0],[0,0,0,0],[0,0,0,2]]
輸出: 4
解釋: 我們有以下四條路徑:
1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2),(2,3)
2. (0,0),(0,1),(1,1),(1,0),(2,0),(2,1),(2,2),(1,2),(0,2),(0,3),(1,3),(2,3)
3. (0,0),(1,0),(2,0),(2,1),(2,2),(1,2),(1,1),(0,1),(0,2),(0,3),(1,3),(2,3)
4. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2),(2,3)

範例 3:
輸入: [[0,1],[2,0]]
輸出: 0
解釋:
沒有任何路徑可以走過所有空方塊恰好一次。
注意起始方塊以及終點方塊可以位於 grid 中的任意位置。


解題思維:
假設所有的空方塊 + 終點方塊之總數為 K 。

然後我們從起點方塊開始進行遞迴(深度優先搜尋(Depth First Search,DFS)),每格都可以往上下左右遞迴(但是記得忽略超出範圍的移動以及障礙物,而且不要走回到之前走過的方塊)。

當我們遞迴深度恰好為 K 且我們恰好在終點方塊時,則代表我們找到了一個走法可以從起點走到終點並且經過所有空方塊恰好一次。

全部的可能都遞迴完後,途中找到如上之走法總數即是所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作