描述:

m*n的矩阵,从左上角走到右下角,只能向下或向右走。

解决:

简单dp,dp[i][j]表示到i,j这点总共多少种路径。

dp[i][j] = dp[i][j - 1] + dp[i - 1][j],化为一维:

int uniquePaths(int m, int n) {
int* arr = new int[m]();
for (int i = ; i < m; ++i) // 初始化
arr[i] = ; for (int i = ; i < n; ++i) {
for (int j = ; j < m; ++j) {
if (j == )
arr[] = ;
arr[j] = arr[j - ] + arr[j];
}
}
return arr[m - ];
}

注意,1*1的化结果是1的,如果别的题目是0,初始化里i改为从1开始即可。

也可以用数学点的方法解决,m*n的矩阵,假设m是行,则无论怎么走总会向下走m步,向右走n步,

即从m+n中选m个点,剩下为n,即C(m, m+n),组合,朴素解法:

int uniquePaths(int m, int n) {
int sum = m + n - ;
int c = min(m - , n - );
long ret = ;
long chu = ; for (int i = ; i < c; ++i)
ret *= sum--;
for (int i = ; i <= c; ++i)
chu *= i;
return ret/chu;
}

在leetcode可以过,但有快速计算组合数的算法。


dp复杂度:O(m*n)

算组合数复杂度:不大于O(m!),这只是大概的数量级,还有logm的求法。

注意:实际100的阶乘非常大,大于long类型最大值。

leetcode 62 不同的路径的更多相关文章

  1. LeetCode 高效刷题路径

    LeetCode 高效刷题路径 Hot 100 https://leetcode.com/problemset/hot-100/ https://leetcode-cn.com/problemset/ ...

  2. [LeetCode] 62. Unique Paths 不同的路径

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  3. LeetCode 62. Unique Paths(所有不同的路径)

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  4. [LeetCode] 62. Unique Paths 唯一路径

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  5. LeetCode.62——不同路径

    问题描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...

  6. Java实现 LeetCode 62 不同路径

    62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中 ...

  7. LeetCode 62.不同路径(C++)

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

  8. LeetCode 62 不同路径

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

  9. LeetCode 62. Unique Paths不同路径 (C++/Java)

    题目: A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). ...

随机推荐

  1. 理解 python 装饰器

    变量 name = 'world' x = 3 变量是代表某个值的名字 函数 def hello(name): return 'hello' + name hello('word) hello wor ...

  2. 最新解决 Ubuntu16.04 和 win10 双系统时间同步问题 (设置为 UTC 时间)

    最近在电脑上安装了 Ubuntu16.04 和  Win10 双系统, 开机后发现电脑的开机系统出现了问题,不知道怎么搞的总是会出现8个小时的误差,在网上查了好多文章发现网上的大部分方法都是比较过时的 ...

  3. mybatis异常:Could not find result map Java.util.Map 问题分析及解决 定位不到具体的位置的错误

    mybatis异常:Could not find result map Java.util.Map 问题分析及解决 报这个错误呢,很难受的就是你定位不到具体的地方,找不到位置修改,你只知道有错误,但是 ...

  4. 7-26 Harry Potter's Exam(25 分)

    In Professor McGonagall's class of Transfiguration, Harry Potter is learning how to transform one ob ...

  5. 重新理理C++:从《c++ primer》开始

    以前学过C++,但是感觉很多东西还是不清不楚,很多问题解决起来啃吧啃吧的.... 即使c++的东西看过,但是这本书看起来速度还是提不上去,确实需要扎实扎实.很多以前只会用的东西,这本书上都讲的很清楚, ...

  6. vs2005 sp1 补丁的安装问题

    最近做windows mobile 6.0的手机软件开发,听说用vs2005 开发的话最少得装vs2005 sp1,于是去官网上下了VS80sp1-KB926604-X86-CHS.exe 补丁 .运 ...

  7. 重温MySQL

    登录 mysql -uroot -p123456 查询当前用户 select user(); 不执行某条语句 \c 查看帮助信息 help create user; 创建用户 create user ...

  8. mamp下安装ruby的mysql库

    mysql2库死活不行,用ruby-mysql得了,纯ruby的库 gem "ruby-mysql" require 'mysql'

  9. Java 基于UDP的类似于QQ的循环通信

    package Day10; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetS ...

  10. linux Valgrind使用说明-内存泄漏

    Valgrind使用说明 Valgrind manual: http://valgrind.org/docs/manual/manual.html valgrind的介绍.安装和使用 valgrind ...