leetcode 0062
说明
只是为了记录一下,不求多快,也不深究。
会简要描述思路,代码中不写注释。
如碰到不会做的用了别人代码会在博客中标出。
题目描述
思路
可以把向下走看成0,向右走看成1,一共要向下走m-1次,向右走n-1次。
也就是说要在m+n-2个位置中放置0和1,也就是说要求一共有多少种放法,答案自然就是 C m + n − 2 m − 1 C_{m+n-2}^{m-1} Cm+n−2m−1.
移一下即可。
class Solution {
public int uniquePaths(int m, int n) {
if (m < 2 || n < 2) {
return 1;
}
int small = m < n ? m - 1 : n - 1, big = m > n ? m - 1 : n - 1;
long temp1 = 1;
for (int i = 0; i < small; i++) {
temp1 *= small + big;
big--;
}
long temp2 = 1;
for (; small >= 1; small--) {
temp2 *= small;
}
return (int) (temp1 / temp2);
}
}