2024.3.7
题目来源
我的题解
方法一 使用 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;
}
}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~