62.
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-paths
思路1:时间换空间;
将问题转换为数学问题,以(7,3)为例,往右走6次,往下走2次,即有(6+2)!种排列组合,去掉重复组合6!和2!,结果为8! / 6! / 2!。再根据规律
1*2*3*4*5*6*7*8
1*2*3*4*5*6
1*2
第一个式子可以抵消第二个或第三个式子,而且抵消后,式子1剩下的数刚好和剩下的式子数字数量相等,不必每次都从开始进行计算
/** * @param {number} m * @param {number} n * @return {number} */ var uniquePaths = function(m, n) { let sum=1; let j=1; let memory=1; for(let i=m;i<=m+n-2;i++){ if(i%j==0){ sum*=i/j; } else{ sum*=i; memory*=j; } j++; } return sum/memory; };
思路2:空间换时间,没有那么多花里胡哨,直接按公式计算
/** * @param {number} m * @param {number} n * @return {number} */ var uniquePaths = function(m, n) { return mult(m+n-2)/mult(m-1)/mult(n-1); function mult(data){ return data<=1? 1: data*mult(data-1); } };
内容来源于网络如有侵权请私信删除
- 还没有人评论,欢迎说说您的想法!