博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode]不同路径-Python动态规划
阅读量:4163 次
发布时间:2019-05-26

本文共 953 字,大约阅读时间需要 3 分钟。

Leetcode]不同路径

题目描述

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

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
在这里插入图片描述
例如,上图是一个7 x 3 的网格。有多少可能的路径?

示例 1:

输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。

  1. 向右 -> 向右 -> 向下
  2. 向右 -> 向下 -> 向右
  3. 向下 -> 向右 -> 向右

示例 2:

输入: m = 7, n = 3
输出: 28

提示:

1 <= m, n <= 100
题目数据保证答案小于等于 2 * 10 ^ 9

解题思路
  • 到达位置 [row, col] 的只能是从 [row - 1, col] 或者 [row, col - 1] 来,那么 到达位置 [row, col] 的路径总数 = 到达位置 [row - 1, col] 的路径总数 + 到达位置 [row, col - 1] 的路径总数
实现代码
class Solution:    def uniquePaths(self, m: int, n: int) -> int:        dp = [[1] * m] * n        for row in range(1, n):            for col in range(1, m):                dp[row][col] = dp[row - 1][col] + dp[row][col - 1]        return dp[n-1][m-1]

空间优化:用一维代替二维

class Solution:    def uniquePaths(self, m: int, n: int) -> int:        dp = [1] * m        for row in range(1,n):            for col in range(1, m):                dp[col] += dp[col - 1]        return dp[-1]

转载地址:http://tyoxi.baihongyu.com/

你可能感兴趣的文章
Java集合(4) - HashMap-put()源码解析与常见问题(二)
查看>>
Java集合(5) - HashMap查删源码解析与常见问题(三)
查看>>
Java集合(6) - LinkedHashMap源码解析
查看>>
Java集合(7) - TreeMap源码解析
查看>>
Java集合(8) - Set与AbstractSet源码解析
查看>>
Java多线程(2) - 多线程之线程安全详解(synchronized、Lock)
查看>>
OKR与CFR管理模式(二)-CFR与OKR的绩效管理
查看>>
Java多线程(3) - 多线程之死锁
查看>>
Java多线程(4) - 多线程之Volatile关键字、ThreadLocal、Atomic系列类、CAS
查看>>
Java多线程(5) - 多线程之线程通讯(一)(wait、notify、join、yield、sleep区别与应用)
查看>>
Java多线程(6) - 多线程之线程通讯(二)(wait与notify案例、守护线程)
查看>>
什么是项目管理?怎么管?(二)
查看>>
Java多线程(7) - 多线程之线程停止方式
查看>>
Java设计模式(1) - 单例设计模式多种写法
查看>>
Java设计模式(2) - 工厂设计模式
查看>>
Java多线程(8) - 同步(并发)类容器详解(CopyOnWrite容器、ConcurrentMap容器、Queue队列容器)
查看>>
Java设计模式(3) - 多线程并发设计模式 - Future设计模式
查看>>
Java设计模式(5) - 多线程并发设计模式 - 生产者-消费者设计模式多种写法
查看>>
Java多线程(9) - 多线程 - 线程池详解与使用示例
查看>>
Java多线程(10) - 多线程 - CountDownLatch、CyclicBarrier、Semaphore使用示例详解
查看>>