設想有個機械人坐在乙個網格的左上角,網格 r 行 c 列。機械人只能向下或向右移動,但不能走到一些被禁止的網格(有障礙物)。設計一種演算法,尋找機械人從左上角移動到右下角的路徑。
網格中的障礙物和空位置分別用 1 和 0 來表示。
返回一條可行的路徑,路徑由經過的網格的行號和列號組成。左上角為 0 行 0 列。如果沒有可行的路徑,返回空陣列。
示例
輸入:
[ [0,0,0],
[0,1,0],
[0,0,0]
]輸出: [[0,0],[0,1],[0,2],[1,2],[2,2]]
解釋:
輸入中標粗的位置即為輸出表示的路徑,即
0行0列(左上角) -> 0行1列 -> 0行2列 -> 1行2列 -> 2行2列(右下角)
思路
在網格上移動,我們很容易就想到dfs演算法,尋找一條直通的道路,是一道常規的dfs題目
class solution
pathlist.add(arrays.aslist(row, col));
//到最後乙個格仔了,也就是完成任務了
if (row == m - 1 && col == n - 1)
//如果不是上邊所列的異常情況,將當前格仔標記為已經歷過
visited[row][col] = true;
//如果右邊格仔或者下邊格仔是true的話,返回true。這裡有一點需要注意,因為||的性質,前者,即右格為true的時候,就先不執行下格了。只有右格之後的路徑難以為繼的時候,才會來這裡繼續執行下格
if (dfs(row, col + 1, visited, pathlist) || dfs(row + 1, col, visited, pathlist))
//如果已經到了末路,即當前格仔沒有障礙,但右、下格仔都是障礙的話,但還沒有到達最後的格仔,刪掉陣列pathlist的最後乙個元素。並返回false
pathlist.remove(pathlist.size() - 1);
return false;
}public list> pathwithobstacles(int grid)
}
題目來自力扣
答案**
每日一題(36)
上圖是乙個 的九宮格,如你所見乙個數字對應一些字母,因此在國外企業喜歡把 號碼設計成與自己公司名字相對應。例如公司的help desk號碼是4357,因為4對應h 3對應e 5對應l 7對應p,因此4357就是help。同理,tut glop就代表888 4567 310 gino代表310 446...
每日一題 迷路的牛牛
本題來自牛客網,為網易2019年校招題之一。點我跳轉 題目描述 牛牛去犇犇老師家補課,出門的時候面向北方,但是現在他迷路了。雖然他手裡有一張地圖,但是他需要知道自己面向哪個方向,請你幫幫他。輸入描述 每個輸入包含乙個測試用例。每個測試用例的第一行包含乙個正整數,表示轉方向的次數n n 1000 接下...
每日一題 day4
基礎題 1 判斷兩個鍊錶是否相交,若相交,求交點 假設鍊錶不帶環 思路 2 判斷兩個鍊錶是否相交,若相交,求交點 假設鍊錶可能帶環 思路 兩個鍊錶帶環可分為兩種情況 1.乙個帶環,乙個不帶環 這種情況是不會有交點的 2.兩個都帶環 分析 入口點相同時,分別讓兩個鍊錶從入口點處斷開,則轉換成了兩個不帶...