leetcode 2575.找出字符串的可整除数组

这道题实际上是对于数论知识考察的一道题,如果你要硬解,好,你可以先看我的题解

复制代码
class Solution {
public:
    vector<int> divisibilityArray(string word, int m) {
        int n=word.size();
        vector<int>res;
        long long num=0;
        string buf;
        for(int i=0;i<n;i++){
            buf+=word[i];
            istringstream is(buf);
            is>>num;
            if(num%m==0)
            res.push_back(1);
            else
            res.push_back(0);
        }
        return res;

    }
};

结果呢,因为这里的数过于庞大了,我们没有一个数据类型可以存储位数更大的数,所以就导致只能过一部分数据。

怎么办呢?这里就有一个数论的知识,即模运算。

模运算大家可以去查一下模运算_百度百科 (baidu.com)

这里给大家举个例子:假如a=km+b,那么当a%mod时,a%mod=km%mod+b%mod。就是运用这个知识点来进行计算。

我们对于前缀的数字进行更新的式子是:num=num*i+(word[i]-'0'),这样就能求出各个前缀的数字。这个式子大家可以死记硬背下来,以后也会有用的。

既然我们的数太过于大,所以我们需要用模运算减少数据的的位数,所以我们就运用了上面的数论知识,我们可以对于数字直接取余,这样对于下一个数字过来的时候数字就会很小了。

如果你想看模运算的推理,可以看下面这位大佬的解读:

复制代码
(a + b) mod m = (a mod m + b mod m) mod m    (1)
(a * b) mod m = (a mod m * b mod m) mod m    (2)
由(1)知,(a * 10 + b) mod m = (a * 10 mod m + b mod m) mod m
再由(2)知,---------------> = ((a mod m * 10 mod m) mod m + b mod m) mod m
再由(1)知,---------------> = (a mod m * 10 mod m + b) mod m

上代码:

复制代码
class Solution {
public:
    vector<int> divisibilityArray(string word, int m) {
        int n=word.size();
        vector<int>res;
        long long num=0;
        string buf;
        for(int i=0;i<n;i++){
            num=(num*10+(word[i]-'0'))%m;
            if(num==0)
            res.push_back(1);
            else
            res.push_back(0);
        }
        return res;

    }
};
相关推荐
Aaron15887 分钟前
基于VU13P在人工智能高速接口传输上的应用浅析
人工智能·算法·fpga开发·硬件架构·信息与通信·信号处理·基带工程
予枫的编程笔记9 分钟前
【论文解读】DLF:以语言为核心的多模态情感分析新范式 (AAAI 2025)
人工智能·python·算法·机器学习
im_AMBER18 分钟前
Leetcode 99 删除排序链表中的重复元素 | 合并两个链表
数据结构·笔记·学习·算法·leetcode·链表
Q741_14727 分钟前
海致星图招聘 数据库内核研发实习生 一轮笔试 总结复盘(1) 作答语言:C/C++ 链表 二叉树
开发语言·c++·经验分享·面试·笔试
咔咔咔的31 分钟前
1970. 你能穿过矩阵的最后一天
c++
_OP_CHEN31 分钟前
【从零开始的Qt开发指南】(十九)Qt 文件操作:从 I/O 设备到文件信息,一站式掌握跨平台文件处理
开发语言·c++·qt·前端开发·文件操作·gui开发·qt文件
CSDN_RTKLIB33 分钟前
【std::map】双向迭代器说明
c++·stl
王老师青少年编程36 分钟前
信奥赛C++提高组csp-s之欧拉回路
c++·算法·csp·欧拉回路·信奥赛·csp-s·提高组
No0d1es38 分钟前
2025年12月 GESP CCF编程能力等级认证C++六级真题
c++·青少年编程·gesp·ccf·6级
Terrence Shen43 分钟前
【CUDA编程系列】之01
c++·人工智能·深度学习·机器学习