2024.3.7力扣每日一题——找出字符串的可整除数组

2024.3.7

      • 题目来源
      • 我的题解
        • [方法一 使用 BigInteger类(超时)](#方法一 使用 BigInteger类(超时))
        • [方法二 数学](#方法二 数学)

题目来源

力扣每日一题;题序:2575

我的题解

方法一 使用 BigInteger类(超时)

将字符串转换为BigInteger类

java 复制代码
import java.math.BigInteger;
class Solution {
    public int[] divisibilityArray(String word, int m) {
        int n=word.length();
        int[] res=new int[n];
        for(int i=1;i<=n;i++){
            BigInteger num=new BigInteger(word.substring(0,i));
            if(num.mod(BigInteger.valueOf(m)).equals(new BigInteger("0"))){
                res[i-1]=1;
            }
        }
        return res;
    }
}
方法二 数学

参考官方题解

一个整数可表示为 a×10+b:

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

所以可以按照上面的递推式,根据当前表示整数的余数,算出包含下一位字符所表示的整数的余数。

当余数为零时即为可整除数组,否则不是。最后返回结果即可。
时间复杂度:O(n)

空间复杂度:O(1)

java 复制代码
class Solution {
    public int[] divisibilityArray(String word, int m) {
        int[] res = new int[word.length()];
        long cur = 0;
        for (int i = 0; i < word.length(); i++) {
            char c = word.charAt(i);
            cur = (cur * 10 + (c - '0')) % m;
            res[i] = (cur == 0) ? 1 : 0;
        }
        return res;
    }
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐
鬼火儿3 分钟前
15.<Spring Boot 日志>
java·后端
Mos_x3 分钟前
SpringBoot】Spring Boot 项目的打包配置
java·后端
QQ12958455046 分钟前
ThingsBoard部件数据结构解析
数据结构·数据库·物联网·iot
qianbailiulimeng7 分钟前
【Spring Boot】Spring Boot解决循环依赖
java·后端
何中应7 分钟前
Spring Boot解决循环依赖的几种办法
java·spring boot·后端
donotshow8 分钟前
SpringBoot】Spring Boot 项目的打包配置
java·后端
鬼火儿9 分钟前
Spring Boot 整合 ShedLock 处理定时任务重复
java·后端
王元_SmallA11 分钟前
【Spring Boot】Spring Boot解决循环依赖
java·后端
chian-ocean18 分钟前
双向链表的“链”与“殇”——Rust LinkedList 的深度剖析、实战与再思考
数据结构·链表·rust