当前位置: 首页 > article >正文

数据结构与算法之动态规划: LeetCode 62. 不同路径 (Ts版)

不同路径

  • https://leetcode.cn/problems/unique-paths/description/

描述

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

示例 1

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

示例 2

输入:m = 3, n = 2
输出:3

解释:
从左上角开始,总共有 3 条路径可以到达右下角。

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

示例 3

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

示例 4

输入:m = 3, n = 3
输出:6

提示

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

Typescript 版算法实现


1 ) 方案1: 排列组合

function uniquePaths(m: number, n: number): number {
    // 计算组合数 C(m+n-2, m-1) 或 C(m+n-2, n-1)
    // 选择较小的那个计算以减少循环次数
    const k = Math.min(m - 1, n - 1);
    let result = 1;

    for (let i = 1; i <= k; i++) {
        result *= (m + n - 1 - i);
        result = Math.floor(result / i); // 确保每一步都是整数除法
    }

    return result;
}

2 )方案2: 组合优化版

function uniquePaths(m: number, n: number): number {
    let ans = 1;
    for (let x = n, y = 1; y < m; ++x, ++y) {
        ans = Math.floor(ans * x / y);
    }
    return ans;
};

3 ) 方案3: 动态规划

function uniquePaths(m: number, n: number): number {
    const f = new Array(m).fill(0).map(() => new Array(n).fill(0));
    for (let i = 0; i < m; i++) {
        f[i][0] = 1;
    }
    for (let j = 0; j < n; j++) {
        f[0][j] = 1;
    }
    for (let i = 1; i < m; i++) {
        for (let j = 1; j < n; j++) {
            f[i][j] = f[i - 1][j] + f[i][j - 1];
        }
    }
    return f[m - 1][n - 1];
}

4 ) 方案4: 动态规划优化版

function uniquePaths(m: number, n: number): number {
    const f = new Array(n).fill(1)
    for (let i = 1; i < m; i++) {
        for (let j = 1; j < n; j++) {
            f[j] += f[j-1]
        }
    }
    return f[n - 1];
};

http://www.kler.cn/a/460824.html

相关文章:

  • AWS K8s 部署架构
  • 【Rust自学】9.3. Result枚举与可恢复的错误 Pt.2:传播错误、?运算符与链式调用
  • 2024年12月 Scratch 图形化(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 速盾:服务器CDN加速解析的好处有哪些呢?
  • 珞珈一号夜光遥感数据地理配准,栅格数据地理配准
  • Agent系列:AppAgent v2-屏幕智能Agent(详解版)
  • 非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 5(未实现预期目标)
  • Pytest 高级用法:间接参数化
  • 25考研希望渺茫,工作 VS 二战,怎么选?
  • 2024年RAG:回顾与展望
  • KEGG大更新:开启生物研究新纪元
  • 物联网技术在电商API接口中的应用实践
  • Spring Boot中使用Zookeeper实现分布式锁的案例
  • SQL相关子查询
  • 【数据分析】基于GEE的2000-2023年逐年归一化差值水分指数(NDMI)获取-以成都市为例
  • neo4j图数据库简介
  • AI的未来?华为仓颉编程语言与人工智能的接轨
  • 【网络协议】什么是 BGP? | 解释 BGP 路由
  • 【算法题解】B. President‘s Office - Python实现
  • 如何利用小程序高效获客,小程序引流怎么样
  • 大语言模型提示词工程 - ReACT 推理模式
  • [.闲于修.]Autosar_UDS_笔记篇_ISO14229-1
  • odoo17 4模型视图理解
  • 小程序组件 —— 21组件案例演示 - 划分页面结构
  • 小米自研vela系统kvdb数据库的使用(一)
  • 微信小程序Uniapp