每日一題 Day36 迷路機械人

2022-09-18 18:12:12 字數 1121 閱讀 5670

設想有個機械人坐在乙個網格的左上角,網格 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.兩個都帶環 分析 入口點相同時,分別讓兩個鍊錶從入口點處斷開,則轉換成了兩個不帶...