zoukankan      html  css  js  c++  java
  • leetcode刷题-62不同路径

    题目

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

    机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

    问总共有多少条不同的路径?

    思路

    回溯:能够实现,不断向右或者向下,但是效率过低,无法通过

    动态规划:

    令 dp[i][j] 是到达 i, j 最多路径,因此动态方程为dp[i][j] = dp[i-1][j] + dp[i][j-1],其中第一行 dp[0][j]和第一列 dp[i][0],在边界,所以其值只能为 1、

    进一步优化:每一格的值只与上一行有关,因此我们只要维护一行的值即可

    实现

    回溯:

    class Solution:
        def uniquePaths(self, m: int, n: int) -> int:
            result = 0
            def step(x,y):
                if x < m-1:
                    step(x+1,y)
                if y < n-1:
                    step(x,y+1)
                if x == m -1 and y == n-1:
                    nonlocal result
                    result += 1
            step(0,0)
            return result

    动态规划:

    class Solution:
        def uniquePaths(self, m: int, n: int) -> int:
            matrix = [[0 for i in range(n)] for j in range(m)]
            for k in range(m):
                for j in range(n):
                    if k < 1:
                        matrix[k][j] = 1
                    elif j < 1:
                        matrix[k][j] = 1
                    else:
                        matrix[k][j] = matrix[k-1][j] + matrix[k][j-1]
            return matrix[m-1][n-1]

    优化:

    class Solution:
        def uniquePaths(self, m: int, n: int) -> int:
            matrix = [1 for i in range(n)]
            for k in range(1,m):
                for j in range(1,n):
                        matrix[j] += matrix[j-1]
            return matrix[n-1]
  • 相关阅读:
    powershell查看pc信息的常用命令
    OSPF_Network-type
    redistribute and Suboptimal routing
    redistribute_prefix
    分发列表
    自增和自减
    逻辑运算
    判断闰年
    XenApp简单部署
    使用git将本地文件提交到github存储库
  • 原文地址:https://www.cnblogs.com/mgdzy/p/13445155.html
Copyright © 2011-2022 走看看