leetcode63 不同路径 II

leetcode63 Unique Paths II

Posted by BY on December 21, 2018

前言

刷水题度日

正文

问题来源

本问题来自leetcode上的63题。

问题描述

一个机器人位于一个 m x n 网格的左上角 。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

示例 1
输入: 
[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]
输出: 2

分析:

func uniquePathsWithObstacles(obstacleGrid [][]int) int {
    if nil == obstacleGrid {
        return 0
    }
    li := len(obstacleGrid)
    d := make([][]int, li)
    lj := len(obstacleGrid[0])
    var i int
    var j int
	for i = range d {
		d[i] = make([]int, lj)
	}
	if obstacleGrid[0][0] == 0 {
	    d[0][0] = 1
	} else {
	    d[0][0] = 0
	}
	for i = 1; i < li; i++ {
	    if obstacleGrid[i][0] == 0 {
	        d[i][0] = d[i-1][0]
	    } else {
	        d[i][0] = 0
	    }
	}
	for j = 1; j < lj; j++ {
	    if obstacleGrid[0][j] == 0 {
	        d[0][j] = d[0][j-1]
	    } else {
	        d[0][j] = 0
	    }
	}
	for i = 1; i < li; i++ {
	    for j = 1; j < lj; j++ {
	        if obstacleGrid[i][j] == 0 {
	            d[i][j] = d[i-1][j] + d[i][j-1]
	        } else {
	            d[i][j] = 0
	        }
	    }
	}
	return d[li-1][lj-1]
}

总结:

水一水

结语

不要懒,多看多写。