62.不同路径
觉得这是一道数学问题了。机器人只能向右走或者是向下走,要从起点到终点,必须要走m+n-2步,从这m+n-2步中选出m-1步往下走,n-1步往右走。要求的就是组合数Cm+n-2n-1或者Cm+n-2m-1了,m-1和n-1,哪个小选哪个。代码如下:
class Solution {
public:
int uniquePaths(int m, int n) {
int num=m+n-2;
int less=m>n?n-1:m-1;
long long g=1;
long long h=1;
for(int i=less; i>0; --i){
g=g*num;
--num;
}
for(int i=less; i>0; --i){
h=h*less;
--less;
}
return g/h;
}
};
算阶乘刚开始用了“!”,报错,所以改成用循环了。g,h设为int会溢出,改为long long。
执行用时0ms,击败100%。内存消耗6.2MB,击败64.84%。