leetcode 62 不同的路径
描述:
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 不同的路径的更多相关文章
- LeetCode 高效刷题路径
LeetCode 高效刷题路径 Hot 100 https://leetcode.com/problemset/hot-100/ https://leetcode-cn.com/problemset/ ...
- [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 ...
- 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 ...
- [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 ...
- LeetCode.62——不同路径
问题描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...
- Java实现 LeetCode 62 不同路径
62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中 ...
- LeetCode 62.不同路径(C++)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问总共有多 ...
- LeetCode 62 不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ).机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角.问总共有多少条不同的路径? 示例 1: 输入: ...
- 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). ...
随机推荐
- 理解 python 装饰器
变量 name = 'world' x = 3 变量是代表某个值的名字 函数 def hello(name): return 'hello' + name hello('word) hello wor ...
- 最新解决 Ubuntu16.04 和 win10 双系统时间同步问题 (设置为 UTC 时间)
最近在电脑上安装了 Ubuntu16.04 和 Win10 双系统, 开机后发现电脑的开机系统出现了问题,不知道怎么搞的总是会出现8个小时的误差,在网上查了好多文章发现网上的大部分方法都是比较过时的 ...
- mybatis异常:Could not find result map Java.util.Map 问题分析及解决 定位不到具体的位置的错误
mybatis异常:Could not find result map Java.util.Map 问题分析及解决 报这个错误呢,很难受的就是你定位不到具体的地方,找不到位置修改,你只知道有错误,但是 ...
- 7-26 Harry Potter's Exam(25 分)
In Professor McGonagall's class of Transfiguration, Harry Potter is learning how to transform one ob ...
- 重新理理C++:从《c++ primer》开始
以前学过C++,但是感觉很多东西还是不清不楚,很多问题解决起来啃吧啃吧的.... 即使c++的东西看过,但是这本书看起来速度还是提不上去,确实需要扎实扎实.很多以前只会用的东西,这本书上都讲的很清楚, ...
- vs2005 sp1 补丁的安装问题
最近做windows mobile 6.0的手机软件开发,听说用vs2005 开发的话最少得装vs2005 sp1,于是去官网上下了VS80sp1-KB926604-X86-CHS.exe 补丁 .运 ...
- 重温MySQL
登录 mysql -uroot -p123456 查询当前用户 select user(); 不执行某条语句 \c 查看帮助信息 help create user; 创建用户 create user ...
- mamp下安装ruby的mysql库
mysql2库死活不行,用ruby-mysql得了,纯ruby的库 gem "ruby-mysql" require 'mysql'
- Java 基于UDP的类似于QQ的循环通信
package Day10; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetS ...
- linux Valgrind使用说明-内存泄漏
Valgrind使用说明 Valgrind manual: http://valgrind.org/docs/manual/manual.html valgrind的介绍.安装和使用 valgrind ...