博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2020-12-09-LeetCode中“不同路径”题解
阅读量:3949 次
发布时间:2019-05-24

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


title: LeetCode中不同路径题解

description: LeetCode中不同路径题解-java
tags:

  • LeetCode
  • 算法
    categories: LeetCode
    abbrlink: ab2fe1e
    date: 2020-12-09 10:23:00

LeetCode中不同路径题解-java

题目

难度中等782

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

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

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

img

例如,上图是一个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

题解

方法一:组合数

思路

从左上角到右下角的过程中,我们需要移动 m+n−2 次,其中有 m−1 次向下移动,n−1 次向右移动。因此路径的总数,就等于从 m+n−2 次移动中选择 m−1 次向下移动的方案数,即组合数:

image-20201209103318966

代码实现

class Solution {
public int uniquePaths(int m, int n) {
// 思路:从左上角到右下角的过程中,需要移动m + n -2次,其中m-1次向下移动,n-1次向右移动 // 因此路径的总数,就等于m+n-2次移动过程中m-1次向下移动的方案书,即组合数 long ans=1; for(int i=0;i

复杂度分析

  • 时间复杂度:O(m)。由于我们交换行列的值并不会对答案产生影响,因此我们总可以通过交换 m 和 n 使得m≤n,这样空间复杂度降低至O(min(m,n))。

  • 空间复杂度:O(1)。

提交详情

image-20201209103427576

方法二:动态规划

思路

f(i,j)代表从左上角走到(i,j)的路径数量,由于我们每一步只能从向下或者向右移动一步,因此要想走到 (i,j),如果向下走一步,那么会从 (i−1,j) 走过来;如果向右走一步,那么会从 (i,j−1) 走过来。因此我们可以写出动态规划转移方程:f(i, j) = f(i-1, j) + f(i, j - 1),

边界条件及初始值: f(i, 0) = 1; f(0,j) = 1

最终的答案即为 f(m−1,n−1)。

代码实现

class Solution {
public int uniquePaths(int m, int n) {
// 方法一:动态规划 // 思路:f(i,j)代表从左上角走到(i,j)的路径数量,所以得出 // 动态规划转移方程:f(i, j) = f(i-1, j) + f(i, j - 1) // 边界条件及初始值: f(i, 0) = 1; f(0,j) = 1 // 新建一个二维数组f, 用来存放每个位置的路径值 int[][] f = new int[m][n]; // 递推路径值,当为边界条件时,值为1,不在边界条件时,使用规划方程 for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(i == 0 || j == 0){
f[i][j] = 1; }else{
f[i][j] = f[i - 1][j] + f[i][j - 1]; } } } // 返回右下角到左上角的路径值 return f[m - 1][n - 1]; }}

复杂度分析

  • 时间复杂度:O(mn)。

  • 空间复杂度:O(mn),即为存储所有状态需要的空间

提交详情

image-20201209103206014

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

你可能感兴趣的文章
进制转换
查看>>
【UML】静态视图分析示例
查看>>
【UML】动态视图分析示例
查看>>
【UML】开发过程应用
查看>>
【UML】四大关系篇
查看>>
行是知之始,知是行之成
查看>>
软件开发文档小结
查看>>
【UML】开发文档应用
查看>>
【UML】类图与用例图关系解析
查看>>
【SLA】理论学习阶段小结
查看>>
【C#】视频学习笔记(三)
查看>>
Power English 初始学习篇
查看>>
Mini Story 的正确打开方式
查看>>
【设计模式】基础篇
查看>>
【设计模式】六大设计原则篇
查看>>
【设计模式】理论整合+应用场景(一)
查看>>
【设计模式】理论整合+应用场景(二)
查看>>
《操作系统概论》调度算法小总
查看>>
二叉树遍历
查看>>
原码、反码、补码、移码举例
查看>>