当前位置:网站首页>【動態規劃】不同路徑2
【動態規劃】不同路徑2
2022-04-23 07:16:00 【小風_】
鏈接 https://leetcode-cn.com/problems/unique-paths-ii
一個機器人比特於一個 m x n 網格的左上角,機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角,現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?
定義: d p [ i ] [ j ] dp[i][j] dp[i][j]錶示從索引號 ( 0 , 0 ) (0,0) (0,0)到索引號 ( i , j ) (i,j) (i,j)的路徑走法的數量
邊界:第一行和第一列, d p [ 0 ] [ 0 ] dp[0][0] dp[0][0]只能是1。同時,由於只能下走或右走,因此第一行和第一列都是可直接計算的,為1,如果遇到障礙,為0。
狀態轉移方程: d p [ i ] [ j ] = { d p [ i − 1 ] [ j ] + d p [ i ] [ j − 1 ] , o b s t a c l e G r i d [ i ] [ j ] = 0 0 , o b s t a c l e G r i d [ i ] [ j ] ≠ 0 d p[i][j]= \begin{cases}d p[i-1][j]+dp[i][j-1], & obstacleGrid[i][j]~=\operatorname 0 \\ 0, & obstacleGrid[i][j]~≠\operatorname 0\end{cases} dp[i][j]={ dp[i−1][j]+dp[i][j−1],0,obstacleGrid[i][j] =0obstacleGrid[i][j] =0
說明:當前值,等於上一行和左一列的和,如果遇到障礙,為0
class Solution:
def uniquePathsWithObstacles(self, obstacleGrid):
m = len(obstacleGrid)
n = len(obstacleGrid[0])
dp = [[0 for i in range(n)] for j in range(m)]
for i in range(n):
if obstacleGrid[0][i]==1:
break
dp[0][i] = 1
for i in range(m):
if obstacleGrid[i][0]==1:
break
dp[i][0] = 1
for i in range(1, m):
for j in range(1, n):
if obstacleGrid[i][j] == 0:
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
return dp[m-1][n-1]
版权声明
本文为[小風_]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230610323542.html
边栏推荐
猜你喜欢
随机推荐
第三篇:docker安装mysql容器(自定义端口)
深度学习模型压缩与加速技术(一):参数剪枝
项目,怎么打包
基于BottomNavigationView实现底部导航栏
iTOP4412 SurfaceFlinger(4.4.4_r1)
从0开始封装一套项目的网络请求框架
Viewpager2 realizes Gallery effect. After notifydatasetchanged, pagetransformer displays abnormal interface deformation
[2021 book recommendation] practical node red programming
补补网络缺口
SSL/TLS应用示例
一款png生成webp,gif, apng,同时支持webp,gif, apng转化的工具iSparta
取消远程依赖,用本地依赖
WebRTC ICE candidate里面的raddr和rport表示什么?
iTOP4412 FramebufferNativeWindow(4.0.3_r1)
【2021年新书推荐】Practical Node-RED Programming
Project, how to package
iTOP4412内核反复重启
组件化学习(1)思想及实现方式
Handlerthread principle and practical application
Component based learning (3) path and group annotations in arouter