专栏名称: 猿大侠
猿大侠,既然选择了,就一定成为大侠! 小程序、小游戏、Google、苹果、职场、前沿技术分享,一起成长。
目录
相关文章推荐
央视财经  ·  普京重要表态! ·  23 小时前  
掌上平度  ·  利好来了!名单公布 ·  2 天前  
掌上平度  ·  利好来了!名单公布 ·  2 天前  
财经网  ·  退钱了!明起预约→ ·  3 天前  
51好读  ›  专栏  ›  猿大侠

感觉被deepseek侮辱了。

猿大侠  · 公众号  ·  · 2025-02-21 18:00

正文


最近DeepSeek是异常火爆,不过每天提问一次还是正常的,如果提问多了就会出现“ 服务器繁忙,请稍后再试 ”,很是让人头疼。 不过把深度思考(R1)关闭之后就正常了,这也算是一种解决方式吧。 但关闭之后的回答感觉还是缺少了点什么,于是各种胡乱提问,终于迎来了DeepSeek的报复。 关键我没有上传过图片,也没有打开摄像头 ……




--------------下面是今天的算法题--------------


来看下今天的算法题,这题是LeetCode的第2575题:找出字符串的可整除数组。


问题描述



来源:LeetCode第2575题
难度:中等

给你一个下标从 0 开始的字符串 word ,长度为 n ,由从 0 到 9 的数字组成。另给你一个正整数 m 。word 的可整除数组 div  是一个长度为 n 的整数数组,并满足:

1,如果 word[0,...,i] 所表示的数值能被 m 整除,div[i] = 1

2,否则,div[i] = 0


返回 word 的可整除数组。


示例1:

输入 :word = "998244353", m = 3

输出 :[1,1,0,0,0,1,1,0,0]

解释 :仅有 4 个前缀可以被 3 整除:"9"、"99"、"998244" 和 "9982443" 。

示例2:

输入 :word = "1010", m = 10

输出 :[0,1,0,1]

解释 :仅有 2 个前缀可以被 10 整除:"10" 和 "1010" 。


  • 1 <= n <= 10^5

  • word.length == n

  • word 由数字 0 到 9 组成

  • 1 <= m <= 10^9


问题分析



这题让计算前 i 个字符串表示的数字能否被 m 整除,能否整除直接求余即可,比如 a%b=0,就表示 a 能被 b 整除。

我们还知道对于所有正整数(负的不满足)的取模运算都满足下面几个公式,

(a+b)%m=(a%m+b%m)%m

(a+b)%m=(a%m+b)%m

(a×10+b)%m=(a×10%m+b)%m


我们直接按照上面最后一个公式,根据当前整数的余数,计算出包含下一位字符所表示的整数的余数,如果余数为 0 ,则表示能被 m 整除。

JAVA:
public int[] divisibilityArray(String word, int m) {
    int length = word.length();
    int ans[] = new int[length];
    long modSum = 0;
    for (int i = 0; i < length; i++) {
        modSum = modSum * 10 + word.charAt(i) - '0';
        modSum %= m;
        if (modSum == 0)// 能被m整除
            ans[i] = 1;
    }
    return ans;
}

C++:
public:
    vector<intdivisibilityArray(string word, int m) {
        int length = word.length();
        vector<intans(length);
        long modSum = 0;
        for (int i = 0; i < length; i++) {
            modSum = modSum * 10 + word[i] - '0';
            modSum %= m;
            if (modSum == 0)// 能被m整除
                ans[i] = 1;
        }
        return






请到「今天看啥」查看全文