zoukankan      html  css  js  c++  java
  • 63. Unique Paths II

    https://leetcode.com/problems/unique-paths-ii/

    本题大意:本题是Unique Paths的扩展。试想,如果对上一题表格中加入一些障碍,用1来表示,那么可行的路径应该有多少条呢?

    例如:          那么路径的个数应该为2。

    [
      [0,0,0],
      [0,1,0],
      [0,0,0]
    ]
    解题思路:这是一道典型的用动态规划解决的问题。假设用f[i][j]从起点到第i行第j列可行的路径条数,那么f[i][j]的值取决去f[i-1][j]、f[i][j-1]和nums[i][j]的值(这里是和上一题的区别)。如果nums[i][j]=1,那么不用考虑其他,立即得f[i][j]=0;如果nums[i][j]=0,那么f[i][j]=f[i-1][j]+f[i][j-1]。这里要注意的是对边界的处理。
    代码如下:
     1 class Solution {
     2 public:
     3     int uniquePathsWithObstacles(vector<vector<int> >& obstacleGrid) {
     4         if(obstacleGrid.size() == 0) return 0;
     5         int row = obstacleGrid.size();
     6         int col = obstacleGrid[0].size();
     7         int f[row][col];
     8 
     9         for(int i = 0; i < row; i++)
    10         {
    11             for(int j = 0; j < col; j++)
    12                 f[i][j] = 0;
    13         }
    14 
    15         if(obstacleGrid[0][0] == 0) f[0][0] = 1;
    16         else return 0;
    17 
    18         for(int i = 0 ; i < row; i ++),
    19         {
    20             for(int j = 0; j < col; j ++)
    21             {
    22                 if(obstacleGrid[i][j] == 1) f[i][j] = 0;
    23                 else
    24                 {
    25                     if(i >= 1) f[i][j] += f[i-1][j];
    26                     if(j >= 1) f[i][j] += f[i][j-1];
    27                 }
    28             }
    29         }
    30         return f[row-1][col-1];
    31     }
    32 };
  • 相关阅读:
    spring给容器中注入组件的几种方式
    Linux多进程
    Linux多进程的应用
    Linux进程通信
    Linux信号
    Linux共享内存
    Linux信号量
    Linux多线程
    Linux线程同步
    Linux调用可执行程序
  • 原文地址:https://www.cnblogs.com/jingyuewutong/p/5584493.html
Copyright © 2011-2022 走看看