115 不同的路徑 II

2022-02-14 23:29:57 字數 1960 閱讀 1066

中文english

"不同的路徑" 的跟進問題:

現在考慮網格中有障礙物,那樣將會有多少條不同的路徑?

網格中的障礙和空位置分別用 1 和 0 來表示。

example 1:

input: [[0]]

output: 1

example 2:

input: [[0,0,0],[0,1,0],[0,0,0]]

output: 2

explanation:

only 2 different path.

m 和 n 均不超過100

輸入測試資料 (每行乙個引數)如何理解測試資料?

class

solution:

"""@param obstaclegrid: a list of lists of integers

@return: an integer

""""""

大致思路:

1.確定狀態

最後一步:dp[i - 1][j - 1

] 子問題:dp[i][j] = dp[i - 1][j] + dp[i][j - 1

]

2.轉移方程

3.初始條件和邊界情況

l_x =len(obstaclegrid)

l_y = len(obstaclegrid[0

]) dp = [[0]*l_y for _ in len(obs)*l_x]

如果是障礙物

dp[i][j] = 0

對於邊界情況

1.比如[0][0],dp[0][0] = 1

2.對於i = 0,則也為dp[0][j] = 1

,如果當前是障礙物,則後面均為0,直接break即可

3.對於j = 0

,同上

對於不是邊界情況:

如果當前是障礙物:

dp[i][j] = 0

continue

繼續處理下乙個

dp[i][j] = dp[i - 1][j] + dp[i][j - 1

]

4.計算順序

內外迴圈

"""def uniquepathswithobstacles(self, obstaclegrid):

# write your code here

if not obstaclegrid:return

0#初始化

l_x =len(obstaclegrid)

l_y = len(obstaclegrid[0

]) dp = [[0]*l_y for _ in

range(l_x)]

dp[0][0] = 1

for index in

range(l_y):

if obstaclegrid[0][index] == 1

:

break

dp[0][index] = 1

for index in

range(l_x):

if obstaclegrid[index][0] == 1

:

break

dp[index][

0] = 1

#計算順序

for i in range(1

,l_x):

for j in range(1

,l_y):

if (obstaclegrid[i][j] == 1

): dp[i][j] = 0

continue

dp[i][j] = dp[i - 1][j] + dp[i][j - 1

]

return dp[l_x - 1][l_y - 1]

lintcode練習 115 不同的路徑 II

不同的路徑 的跟進問題 現在考慮網格中有障礙物,那樣將會有多少條不同的路徑?網格中的障礙和空位置分別用 1 和 0 來表示。如下所示在3x3的網格中有乙個障礙物 0,0,0 0,1,0 0,0,0 一共有2條不同的路徑從左上角到右下角。m 和 n 均不超過100 如注釋,動態規劃類的題,最主要的是思...

lintcode 115 不同的路徑 II

不同的路徑 ii 不同的路徑 的跟進問題 現在考慮網格中有障礙物,那樣將會有多少條不同的路徑?網格中的障礙和空位置分別用 1 和 0 來表示。注意事項 m 和 n 均不超過100 您在真實的面試中是否遇到過這個題?yes樣例如下所示在3x3的網格中有乙個障礙物 0,0,0 0,1,0 0,0,0 一...

115 不同的路徑

原題 現在考慮網格中有障礙物,那樣將會有多少條不同的路徑?網格中的障礙和空位置分別用 1 和 0 來表示。m 和 n 均不超過100 您在真實的面試中是否遇到過這個題?是 0,0,0 0,1,0 0,0,0 一共有2條不同的路徑從左上角到右下角。標籤陣列 動態規劃 dp 思路 方法同不同的路勁類似,...