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;

    }
};
相关推荐
其实防守也摸鱼35 分钟前
个人学习 Pwn 思路:从基础到漏洞利用的进阶路径
大数据·前端·人工智能·chrome·算法·安全·网络安全
Nuanyt1 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
w_zero_one4 小时前
递归算法(一)
java·开发语言·算法
圣保罗的大教堂4 小时前
leetcode 3736. 最小操作次数使数组元素相等 III 简单
leetcode
文丑颜不良啊5 小时前
LeetCode1881~1990题目解析
java·leetcode
风影同志783246 小时前
20 个比特能装下多少行情?——实测拆解 Kronos 的 K 线分词器
算法
写的都是BUG6 小时前
APK 里的钥匙,一直就放在门口:聊聊加固真正该做什么
前端·算法
lsc_blog7 小时前
年底还在招的岗位,先确认缺口和到岗要求
git·缓存·ci/cd·职场和发展·github
地平线开发者7 小时前
CLIP 的零样本分类:一组文本如何变成图像分类器?
算法
京东云开发者7 小时前
从“会生成”到“能生产”:萤火虫 AIGC 平台的 AI Infra 实践
算法·aigc·产品