[LeetCode]62. Unique Paths

62. Unique Paths

题意:计算从起点到终点有多少中可能的路径(只能走右边和下边)。

首先是分析状态转移方程,假定dp[i][j]表示到达该位置路径的个数。

分析如下:在第一行和第一列的表格中,因为其只能走固定的右边和下边,则其该行和该列上的值都只有一种走法,所以其值都为1,接下来看其它的表格,我们知道当前的路径个数可以从上一个位置和左边一个位置的路径个数之和得出,所以当前的路径个数等于i-1和j-1的路径个数之和。

所以它的转移方程为:

dp[i][j] = 1 (if i == 0 or j == 0)
dp[i][j] = dp[i-1][j] + dp[i][j-1] (if i != 0 and j != 0)

动态规划

class Solution(object):
    def uniquePaths(self, m, n):
        """
        :type m: int
        :type n: int
        :rtype: int
        """
        dp = []
        for i in range(m):
            dp.append([0] * n)
        for i in range(m):
            for j in range(n):
                if i == 0 or j == 0:
                    dp[i][j] = 1
                else:
                    dp[i][j] = dp[i-1][j] + dp[i][j-1]
        return dp[m-1][n-1]
posted @ 2017-08-20 01:45  banananana  阅读(94)  评论(0编辑  收藏  举报