LeetCode 刷题【62. 不同路径】

62. 不同路径

自己做

解:公式计算(溢出处理)

cpp 复制代码
class Solution {
public:
    int uniquePaths(int m, int n) {
        int res = 1;
        bool is_all_div = false;        //标记n - 1的阶乘是否全部被除了
        vector<bool> div(n - 2, false); //标记除数(从2到n - 1,除以1没有意义,这里省略)
 
        for(int i = m; i < n + m - 1; i++){
            int number = i;

            //应除尽除【这里是为了防止多个乘数溢出的情况,那么在乘之前就先尽可能和除数相除】
            for(int j = n - 3; j >= 0; j--){
                if(!div[j] && number % (j + 2) == 0){     //发现有可以整除的除数
                    number /= (j + 2);
                    div[j] = true;                      //标记该数已经取过
                }
            }

            res *= number;

            //应除尽除【经过上面的计算,除数不一定能被完全除玩,因为可能存在上一个余数是2,下一个余数是3,而始终没有一个乘数可以和除数6整除,但事实上,2*3就可以被6整除,而2*3的存放地方就是结果res这里】
            for(int j = n - 3; j >= 0; j--){
                if(!div[j] && res % (j + 2) == 0){     //发现有可以整除的除数
                    res /= (j + 2);
                    div[j] = true;                      //标记该数已经取过
                }
            }

        }

        return res;

    }
};
相关推荐
麦格芬23010 小时前
LeetCode 994 腐烂的橘子
算法·leetcode·职场和发展
mit6.82410 小时前
[re_3]
c++·算法
LDG_AGI10 小时前
【推荐系统】推荐召回算法(一):双塔召回模型训练与推理(Dual Tower Model and Faiss Retrieval)
算法
程序员Xu10 小时前
【LeetCode热题100道笔记】轮转数组
笔记·算法·leetcode
JuneXcy10 小时前
指针高级(3)
数据结构·算法
数维学长98610 小时前
【全网最全】《2025国赛/高教杯》C题 思路+代码python和matlab+文献 一到四问 退火算法+遗传算法 NIPT的时点选择与胎儿的异常判定
开发语言·算法·matlab
zhuoya_10 小时前
子串:最小覆盖子串
java·数据结构·算法·leetcode
only-qi10 小时前
leetcode111. 二叉树的最小深度
数据结构·算法
源代码•宸10 小时前
Leetcode—3516. 找到最近的人【简单】
c++·经验分享·算法·leetcode
1白天的黑夜110 小时前
哈希表-219.存在重复元素II-力扣(LeetCode)
数据结构·c++·leetcode