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).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).

How many possible unique paths are there?

 

思路: 由于题目只要求把unique path的个数求出来,而不要求把所有的unique path都逐个列出来,所以可以使用DP。由于机器人只能往右,或者往下走。所以最上面和最左边的一条边上,所有的位置unique path都是1。如图所示,最后的答案是m+n,所以可以得到L12的DP公式。

 1 class Solution(object):
 2     def uniquePaths(self, m, n):
 3         """
 4         :type m: int
 5         :type n: int
 6         :rtype: int
 7         """
 8         dp = [[1]*n for x in range(m)]
 9         
10         for i in range(1,m):
11             for j in range(1,n):
12                 dp[i][j] = dp[i-1][j] + dp[i][j-1]
13         
14         return dp[-1][-1] 

这个DP table其实还可以简化为一个1-D array。

 1 class Solution(object):
 2     def uniquePaths(self, m, n):
 3         """
 4         :type m: int
 5         :type n: int
 6         :rtype: int
 7         """
 8         dp = [1]*m
 9         
10         for j in range(1,n):
11             for i in range(1,m):
12                 dp[i] = dp[i-1] + dp[i]
13         
14         return dp[-1]

 

posted @ 2017-01-25 14:17  lettuan  阅读(141)  评论(0编辑  收藏  举报