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

62.Unique Paths

思路:
  • dfs,超时
class Solution {
public:
    int uniquePaths(int m, int n) {
        return dfs(m,n,0,0);
    }
    int dfs(int m,int n,int curi,int curj){
        if(m-1 == curi && n-1 == curj) {return 1;}
        if(curi > m-1 || curj > n-1) return 0;
        return dfs(m,n,curi,curj+1) + dfs(m,n,curi+1,curj);
    }
};
  • dfs + 备忘录即可过大数据集。参考文章
class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>>a(m,vector<int>(n,0));
        return dfs(m-1,n-1,a);
    }
    int dfs(int m,int n,vector<vector<int>>& a){
        if(m < 0 || n < 0) return 0;
        if(m == 0 && n == 0) return 1;
        if(a[m][n] > 0) return a[m][n];
        else return a[m][n] = dfs(m-1,n,a) + dfs(m,n-1,a);
    }
};
  • 组合数学方法。\(m /times n的网格,从\)(0,0)\(走到\)(m-1,n-1)\(共需要\)m+n-2$步,其中 \(m-1\) 步向下,\(n-1\) 步向右。如果把向下走记为 \(0\) ,向右走记为 \(1\) ,相当于\(m-1\)\(0\)\(n-1\)\(1\) 排列组合,共有\(C_{m+n-2}^{m-1}\)
class Solution {
public:
    int uniquePaths(int m, int n) {
        if(m == 1 || n == 1) return 1;
        long long res = 1;
        for(int i = max(m-1,n-1) + 1 ; i <= m+n-2; i++) {   //取,m-1和n-1的最大值,否则可能产生溢出
            res = res*i;
        }
        long long res1 = 1;
        for(int i = 1; i <= min(m-1,n-1); i++){
            res1 = res1*i;
        }
        return (int)(res/res1);
    }
};
  • DP。
class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<int> dp(n);
        dp [0] = 1;
        for(int i = 0; i < m; i++){
            for(int j = 1; j < n; j++){
                dp[j] = dp[j] + dp[j-1];    //等式右边第一个dp相当于dp[i-1][j],第二个dp相当于dp[i][j-1]。
            }
        }
        return dp[n-1];
    }
};

转载于:https://www.cnblogs.com/UniMilky/p/6978504.html

相关文章:

  • HttpClient调用api
  • 如何选择版本控制系统之三---代码托管操作
  • UVA 11324 The Largest Clique(强连通分量+缩点DAG的DP)
  • 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
  • Java - byte[] 和 String互相转换
  • 1.5在linux下新增大于2T的硬盘在linux下挂载操作
  • Mybatis在oracle批量更新
  • visual studio for mac在线安装网络错误
  • Angular--ui-router的使用
  • Linux 软件安装
  • 文本样式
  • 第11章 服务管理
  • SQL Server 锁实验(INSERT加锁探究)
  • OpenCV探索之路(十四):绘制点、直线、几何图形
  • 27部优秀的黑客纪录片
  • 深入了解以太坊
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【个人向】《HTTP图解》阅后小结
  • miaov-React 最佳入门
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • python学习笔记 - ThreadLocal
  • rabbitmq延迟消息示例
  • Terraform入门 - 1. 安装Terraform
  • 浮现式设计
  • - 概述 - 《设计模式(极简c++版)》
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 爬虫模拟登陆 SegmentFault
  • 前端_面试
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #laravel 通过手动安装依赖PHPExcel#
  • (02)vite环境变量配置
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (离散数学)逻辑连接词
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十八)三元表达式和列表解析
  • (实战篇)如何缓存数据
  • .apk文件,IIS不支持下载解决
  • .cfg\.dat\.mak(持续补充)
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net Core 中间件验签
  • .NET Core中的去虚
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • @Autowired自动装配
  • @软考考生,这份软考高分攻略你须知道
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [BJDCTF2020]The mystery of ip
  • [C/C++]数据结构 循环队列
  • [CC-FNCS]Chef and Churu
  • [CISCN2019 华北赛区 Day1 Web2]ikun
  • [cogs2652]秘术「天文密葬法」
  • [element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案
  • [hdu1561] The more, The Better 【树形DP】