2024.3.7
- 题目来源
- 我的题解
- 方法一 使用 BigInteger类(超时)
- 方法二 数学
题目来源
力扣每日一题;题序:2575
我的题解
方法一 使用 BigInteger类(超时)
将字符串转换为BigInteger类
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)
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;}
}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~