题目
解题思路
这道题其实是高中数学中排列组合问题里面的典型问题。可以用多种方法求解。
以下给出的方法效率都很高。有数学法、动态规划法、递归法。
代码
法一:数学法

其实,本道题在排列组合问题中可化为求C(m+n-2,m-1)(或C(m+n-2,n-1))。
即一共有m行n列,其中需要向下走m-1步,向右走n-1步,一共走m+n-2步。所以就是在m+n-2步中选出哪m-1步是向下走的,其余自动为向右走的步数。
TIPS:本方法要注意计算组合数的时候要先化简,且要用unsigned long long/double 来表示,否则会超过范围。
class Solution {
public:
int uniquePaths(int m, int n) {
if (m == 1 || n == 1)
return 1;
if (m > n)
swap(m, n);//保证m<=n
//计算阶乘:不用调用函数,节省空间
unsigned long long

该博客详细介绍了LeetCode第62题《不同路径》的三种解法:数学法、递归法和动态规划法。数学法通过计算组合数求解;递归法利用记忆化搜索避免重复计算;动态规划法自底向上计算。每种方法都有其独特之处,并考虑了性能和空间优化。
最低0.47元/天 解锁文章
709

被折叠的 条评论
为什么被折叠?



