63. Unique Paths II

Follow up for "Unique Paths":

Now consider if some obstacles are added to the grids. How many unique paths would there be?

An obstacle and empty space is marked as 1 and 0 respectively in the grid.

For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.

[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]

The total number of unique paths is 2.

一刷
题解:
也是DP问题,Unique Path一样可以in place解决。要点是在设置第一行和第一列碰到obstacle的时候,要将其以及之后的所有值设置为零,因为没有路径可以达到。之后在DP扫描矩阵的时候,也要讲obstacle所在的位置清零。
Time Complexity - O(m * n), Space Complexity - O(mn)。

public class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        int[][] dp = new int[m][n];
        
         for(int i=0; i<m; i++){
             if(obstacleGrid[i][0] == 1){
                 for(int j=i; j<m; j++){
                     dp[j][0] = 0;
                 }
                 break;
             }
             else dp[i][0] = 1;
         }
        
        for(int i=0; i<n; i++){
             if(obstacleGrid[0][i] == 1){
                 for(int j=i; j<n; j++){
                     dp[0][j] = 0;
                 }
                 break;
             }
             else dp[0][i] = 1;
         }
        
        for(int i=1; i<m; i++){
            for(int j=1; j<n; j++){
                if(obstacleGrid[i][j] == 1) dp[i][j] = 0;
                else{
                    if(i == 0||j==0) dp[i][j] = 1;
                    else dp[i][j] = dp[i-1][j] + dp[i][j-1];
                }
            }
        }
        
        return dp[m-1][n-1];
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 愿我可以凭借自己工作的努力能有温饱,有衣穿,有梦做;愿我能凭借自己强大的内心,追梦路上受苦不心苦;愿我可以心如弱水...
    倒骑驴的小黄仙阅读 2,241评论 0 0
  • 我在后花园 抱着白色小猫咪 等风也等你 你在前面咖啡厅 拿着一束满天星 等我也等雨停 秋末天转凉 枫叶落满窗台 自...
    就是兔子先生阅读 2,187评论 2 1
  • 君不见风霜千里北地寒,雨雪边关起狼烟 君不见江南烟雨多笙歌,隔岸渐闻马蹄远 君不见花前月下佳人笑,千里疆场血尤溅 ...
    知秋業阅读 1,202评论 0 1