leetcode 63. 不同路徑 II(Unique Paths II)
阿新 • • 發佈:2019-04-25
long 一個 com toc inf http tor ref 試圖
目錄
- 題目描述:
- 示例 1:
- 解法:
題目描述:
一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。
機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。
現在考慮網格中有障礙物。那麽從左上角到右下角將會有多少條不同的路徑?
網格中的障礙物和空位置分別用 1 和 0 來表示。
說明:m 和 n 的值均不超過 100。
示例 1:
輸入: [ [0,0,0], [0,1,0], [0,0,0] ] 輸出: 2 解釋: 3x3 網格的正中間有一個障礙物。 從左上角到右下角一共有 2 條不同的路徑: 1. 向右 -> 向右 -> 向下 -> 向下 2. 向下 -> 向下 -> 向右 -> 向右
解法:
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { vector<vector<int>> obs = obstacleGrid; int m = obs.size(); if(m == 0){ return 0; } int n = obs[0].size(); if(n == 0){ return 0; } if(obs[0][0] == 1 || obs[m-1][n-1] == 1){ return 0; } vector<long long> dp(n+1, 0); for(int i = 0; i < n; i++){ //initialize the dp vector if(obs[0][i] == 1){ break; }else{ dp[i+1] = 1; } } for(int i = 1; i < m; i++){ for(int j = 1; j <= n; j++){ if(obs[i][j-1] == 1){ dp[j] = 0; }else{ dp[j] += dp[j-1]; } } } return dp.back(); } };
leetcode 63. 不同路徑 II(Unique Paths II)