龙之梦

Stay Hungry, Stay Foolish

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

题目: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]

        感谢阅读,欢迎评论!

阅读更多
文章标签: LeetCode
个人分类: LeetCode
上一篇LeetCode 61 — Rotate List(C++ Java Python)
下一篇LeetCode 67 — Add Binary(C++ Java Python)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭