题目链接:https://leetcode.cn/problems/unique-paths/
题目大意:一个机器人从m*n
的矩阵的左上角出发,目的地是右下角,每次只能向下或向右移动一格,求不同的路径的数量。
思路:就是排列组合。矩阵是m*n
,实际上就是向下走m-1
步,向右走n-1
步,有多少种走法。
或者更简化一点:有m-1
个红球和n-1
个白球,求有多少种排列。
那么可以这样:设原本有m+n-2
个白球,现在要选择m-1
个球涂成红色,有多少种涂法。
答案此时呼之欲出了: C m + n − 2 m − 1 C_{m+n-2}^{m-1} Cm+n−2m−1
计算时,不妨先让m
和n
自减,然后计算
( m + n ) ( m + n − 1 ) . . . ( m + 1 ) n ! \frac{(m+n)(m+n-1)...(m+1)}{n!} n!(m+n)(m+n−1)...(m+1)
由于分子分母都是n
个因数,可以在一个n
重循环内解决,而不必去算阶乘。记得结果使用long
,不然会溢出。文章来源:https://www.toymoban.com/news/detail-429390.html
完整代码文章来源地址https://www.toymoban.com/news/detail-429390.html
class Solution {
public:
int uniquePaths(int m, int n) {
m--;n--;
long int num = 1;
for (int i = m+1; i <= m+n; i++)
num = num * i / (i-m);
return num;
}
};
到了这里,关于【排列组合】个人练习-Leetcode-62. Unique Paths的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!