leetCode.62 - 不同路径

题目

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?

《leetCode.62 - 不同路径》

思路

这里说两种解法:

1、数学思维,排列组合

一共需要走m + n – 2步,其中,m – 1 往右,所以问题转化为求如下图中式子的值:

《leetCode.62 - 不同路径》

2、动态规划

初始第一行全为1,第二行第一个为1,意指到达这些位置的路径只有一种,然后第二行 i 位置的数据由第一行 i 位置的路径数 + 第二行 i-1位置的路径数获得

代码

排列组合

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        n,m=max(m,n),min(m,n)
        
        mult_1=1
        for i in range(n,n+m-1):
            mult_1*=i
        mult_2=1
        for i in range(1,m):
            mult_2*=i
            
        return int(mult_1/mult_2)

动态规划

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        row1 = [1 for i in range(m)]
        row_num=1
        while(row_num<n):
            row2 = [1]
            for i in range(1,m):
                row2.append(row2[i-1]+ row1[i])
            row1 = row2
            row_num+=1
        return row1[-1]

欢迎大家关注我的公众号

《leetCode.62 - 不同路径》 半亩房顶

    原文作者:硌手小石头
    原文地址: https://www.jianshu.com/p/fc3fca987f8b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞