中文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
輸入測試資料 (每行乙個引數)如何理解測試資料?
classsolution:
"""@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 思路 方法同不同的路勁類似,...