LeetCode #62 Unique Paths

题目

Unique Paths


解题方法

从最基础的1×1开始找规律,此时起点就是终点,到达终点的独特的路径数为1,写在方格内。

|1|

变化一下,2×2,此时从起点走到它右边的格子有1种走法,走到下面的格子有1种走法,而走到终点的走法有1+1=2种,写在方格内。

|1| |1|
|1| |2|

再变化一下,3×7,此时从起点走到它右边所有格子都只有1种走法,走到下面所有格子也是1种走法,先写在方格内。

|1| |1| |1|  |1| |1| |1| |1|
|1| |  | |  | |  | |  | |  | |  |
|1| |  | |  | |  | |  | |  | |  |

如果此时把matrix[1][1]视为终点,就是2×2的情形,可以在对应的格子中写出走法数,把matrix[2][2]视为终点,就是3×3的情形,以此类推...可得如下矩阵:

|1| |1|  |1|  |1|    |1|   |1|    |1|
|1| |2| |3|  |4|   |5|   |6|   |7|
|1| |3| |6| |10| |15| |21| |28|

不难看出每个格子中的数字就是从左上角走到这个格子的unique path数。

那么在编程时,我们可以用动态规划的思想,一边构造这个数组,一边计算每个格子的unique path数,首先初始化matrix=[[1]],然后把第一行构造出来。之后遍历m和n,都是先单独处理matrix[m][0],然后把后面的内容计算出来填进去即可,最后返回matrix[-1][-1]。


代码

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        matrix = [[1]]
        for i in range(n-1):
            matrix[0].append(1)
        for i in range(1, m):
            for j in range(n):
                if not j:
                    matrix.append([1])
                else:
                    matrix[i].append(matrix[i-1][j] + matrix[i][j-1])
        return matrix[-1][-1]
posted @ 2020-10-14 11:01  老鼠司令  阅读(60)  评论(0编辑  收藏  举报