leetCode.62 - 不同路径

作者: 半亩房顶 | 来源:发表于2019-03-19 23:09 被阅读0次

    题目

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


    思路

    这里说两种解法:

    1、数学思维,排列组合

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


    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.haomeiwen.com/subject/uqwomqtx.html