leetcode菜狗入門 505 迷宮 II

2021-10-04 09:46:04 字數 1664 閱讀 3284

由空地和牆組成的迷宮中有乙個球。球可以向上下左右四個方向滾動,但在遇到牆壁前不會停止滾動。當球停下時,可以選擇下乙個方向。

給定球的起始位置,目的地和迷宮,找出讓球停在目的地的最短距離。距離的定義是球從起始位置(不包括)到目的地(包括)經過的空地個數。如果球無法停在目的地,返回 -1。

迷宮由乙個0和1的二維陣列表示。 1表示牆壁,0表示空地。你可以假定迷宮的邊緣都是牆壁。起始位置和目的地的座標通過行號和列號給出。

示例 1:

輸入 1

: 迷宮由以下二維陣列表示00

1000

0000

0001

0110

1100

000輸入 2

: 起始位置座標 (rowstart, colstart)=(

0,4)

輸入 3

: 目的地座標 (rowdest, coldest)=(

4,4)

輸出:12

解析: 一條最短路徑 : left -

> down -

> left -

> down -

> right -

> down -

> right。

總距離為 1+1

+3+1

+2+2

+2=12。

示例 2:

輸入 1

: 迷宮由以下二維陣列表示00

1000

0000

0001

0110

1100

000輸入 2

: 起始位置座標 (rowstart, colstart)=(

0,4)

輸入 3

: 目的地座標 (rowdest, coldest)=(

3,2)

輸出:-

1解析: 沒有能夠使球停在目的地的路徑。

注意:

迷宮中只有乙個球和乙個目的地。

球和目的地都在空地上,且初始時它們不在同一位置。

給定的迷宮不包括邊界 (如圖中的紅色矩形), 但你可以假設迷宮的邊緣都是牆壁。

迷宮至少包括2塊空地,行數和列數均不超過100。

dfs 會超時,所以使用 bfs,注意小球會一直滾到底

class

solution,,

,};int

shortestdistance

(vectorint>>

& maze, vector<

int>

& start, vector<

int>

& destination)

x -= dircs[k][0

];y -

= dircs[k][1

];count--;if

(dp[x]

[y]> count));

}}}return dp[destination[0]

][destination[1]

]==0x7fffffff?-

1: dp[destination[0]

][destination[1]

];}}

;

leetcode菜狗入門 66 加一

給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 1 2,3 輸出 1 2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 4 3,2 1 輸出 4 3,...

leetcode菜狗入門 55 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2 3,1 1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1 然後再從位置 1 跳 3 步到達最後 乙個位置。示例 2 輸...

leetcode菜狗入門 125 驗證回文串

給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true示例 2 輸入 race a car 輸出 falseleft 從前往後搜尋,right ...