LeetCode 63 — Unique Paths II(C++ Java Python)

原创 2014年02月25日 22:19:29

题目:http://oj.leetcode.com/problems/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.

Note: m and n will be at most 100.

题目翻译:

"Unique Paths"续:
现在考虑如果在网格中添加一些障碍,会有多少种不同的路径?
网格中分别用1和0标记障碍物和空的网格。
例如,
下图所示的3 x 3方格的中间有一个障碍。
不同的路径总数为2。
注意:m和n最大为​​100。

分析:

        有障碍的地方路径数为0。

C++实现:

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
    	int m = obstacleGrid.size();
    	int n = obstacleGrid[0].size();

    	if(obstacleGrid[0][0] == 1)
    	{
    		return 0;
    	}
    	else if(m == 1 && n == 1)
    	{
    		return 1;
    	}

    	int paths[m][n];

    	for(int i = 0; i < m; ++i)
    	{
    		if(obstacleGrid[i][0] == 1)
    		{
    			while(i < m)
    			{
    				paths[i][0] = 0;
    				++i;
    			}
    			break;
    		}
    		else
    		{
    			paths[i][0] = 1;
    		}
    	}

    	for(int j = 1; j < n; ++j)
        {
        	if(obstacleGrid[0][j] == 1)
        	{
        		while(j < n)
        		{
        			paths[0][j] = 0;
        			++j;
        		}
        		break;
        	}
        	else
        	{
        		paths[0][j] = 1;
        	}
        }

    	for(int i = 1; i < m; ++i)
    		for(int j = 1; j < n; ++j)
    		{
    			if(obstacleGrid[i][j] == 1)
    			{
    				paths[i][j] = 0;
    			}
    			else
    			{
    				paths[i][j] = paths[i][j - 1] + paths[i - 1][j];
    			}
    		}

    	return paths[m - 1][n - 1];
    }
};

Java实现:

public class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
		int m = obstacleGrid.length;
		// if (m == 0) {
		// 	   return 0;
		// }

		int n = obstacleGrid[0].length;

		if (obstacleGrid[0][0] == 1) {
			return 0;
		} else if (m == 1 && n == 1) {
			return 1;
		}

		int[][] paths = new int[m][n];

		for (int i = 0; i < m; ++i) {
			if (obstacleGrid[i][0] == 1) {
				while (i < m) {
					paths[i][0] = 0;
					++i;
				}
				break;
			} else {
				paths[i][0] = 1;
			}
		}

		for (int j = 1; j < n; ++j) {
			if (obstacleGrid[0][j] == 1) {
				while (j < n) {
					paths[0][j] = 0;
					++j;
				}
				break;
			} else {
				paths[0][j] = 1;
			}
		}

		for (int i = 1; i < m; ++i)
			for (int j = 1; j < n; ++j) {
				if (obstacleGrid[i][j] == 1) {
					paths[i][j] = 0;
				} else {
					paths[i][j] = paths[i][j - 1] + paths[i - 1][j];
				}
			}

		return paths[m - 1][n - 1];
    }
}

Python实现:

class Solution:
    # @param obstacleGrid, a list of lists of integers
    # @return an integer
    def uniquePathsWithObstacles(self, obstacleGrid):
        m = len(obstacleGrid)
        n = len(obstacleGrid[0])
        
        if obstacleGrid[0][0] == 1:
            return 0
        elif m == 1 and n == 1:
            return 1
        
        paths = [[] for i in range(m)] 
        
        for i in range(m):
            if obstacleGrid[i][0] == 1:
                while(i < m):
                    paths[i].append(0)
                    i += 1
                break;
            else:
                paths[i].append(1)
        
        for j in range(1, n):
            if obstacleGrid[0][j] == 1:
                while(j < n):
                    paths[0].append(0)
                    j += 1
                break;
            else:
                paths[0].append(1)
                
        for i in range(1, m):
            for j in range(1, n):
                if obstacleGrid[i][j] == 1:
                    paths[i].append(0)
                else:
                    paths[i].append(paths[i][j - 1] + paths[i - 1][j])
                    
        return paths[m - 1][n - 1]

        感谢阅读,欢迎评论!

相关文章推荐

(Java)LeetCode-62. Unique Paths

A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). ...

LeetCode || Unique Paths

A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). Th...

【LeetCode】Unique Paths 解题报告

【题目】 A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram belo...
  • ljiabin
  • ljiabin
  • 2014年12月08日 17:19
  • 3893

LeetCode Unique Paths

这里Note:的含义是如果数值过大会溢出的。 这道题对我来说是很新颖的了,因为我之前没见过。但是其实解法却是非常老套的,我一开始居然没想到,所以总结了一下: 方法论总结: 遇上新颖没见过的题目: 1...

Unique Paths -- LeetCode

原题链接: http://oj.leetcode.com/problems/unique-paths/  这道题是比较典型的动态规划的题目。模型简单,但是可以考核动态规划的思想。 我们先说说brute...

62 Unique Paths

题目链接:https://leetcode.com/problems/unique-paths/题目:A robot is located at the top-left corner of a m ...

Unique Paths II -- LeetCode

原题链接: http://oj.leetcode.com/problems/unique-paths-ii/  这道题跟Unique Paths非常类似,只是这道题给机器人加了障碍,不是每次都有两个...

LeetCode 62 — Unique Paths(C++ Java Python)

题目:http://oj.leetcode.com/problems/unique-paths/ A robot is located at the top-left corner of a m ...

【leetcode】【63】Unique Paths II

一、问题描述 Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. ...

【leetcode】63. Unique Paths II

一、题目描述 Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode 63 — Unique Paths II(C++ Java Python)
举报原因:
原因补充:

(最多只允许输入30个字)