题目描述:
思考了一下,发现其实就两种走法,一个向右一个向下,那,一共要走m+n-2格子也知道了,那其实就是高中数学的填空问题嘛,比如说m+n-2个格子依次排开,我们挑选向下的走法放在哪个格子里,转换为数学公式就是
没毛病吧
class Solution {
public:
int uniquePaths(int m, int n) {
//如果我没猜错的话Cmn就是答案(n是上标),一共走m+n-2步,向下n-1步,那么n-1个元素放在m+n-2个位置
long result = 1;
int total = m+n-2;
int times = m > n ? (n-1) : (m-1);
//直接拿times-=会影响循环
int tmp = times;
//分子 ,不用分子直接除会有小数
int son = 1;
for(int i = 0; i < times; i++){
result *= total;
son *= tmp;
total -= 1;
tmp -= 1;
}
return result/son;
}
};
有点奇怪的就是他给了个案例说result取int型不够,我在本地跑这个例子没问题,改了long就过了。