Input: word ="998244353", m =3Output: [1,1,0,0,0,1,1,0,0]Explanation: There are only 4 prefixes that are divisible by 3:"9","99","998244", and "9982443".
To check if the prefix of the string up to index i is divisible by m, we can maintain the current value modulo m as we iterate through the string. This avoids handling very large numbers.
classSolution {
public: vector<int> divisibilityArray(string word, int m) {
int n = word.size();
vector<int> ans(n);
longlong cur =0;
for (int i =0; i < n; ++i) {
cur = (cur *10+ (word[i] -'0')) % m;
ans[i] = (cur ==0?1:0);
}
return ans;
}
};
classSolution {
publicint[]divisibilityArray(String word, int m) {
int n = word.length();
int[] ans =newint[n];
long cur = 0;
for (int i = 0; i < n; ++i) {
cur = (cur * 10 + (word.charAt(i) -'0')) % m;
ans[i]= cur == 0 ? 1 : 0;
}
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
classSolution {
fundivisibilityArray(word: String, m: Int): IntArray {
val n = word.length
val ans = IntArray(n)
var cur = 0Lfor (i in0 until n) {
cur = (cur * 10 + (word[i] - '0')) % m
ans[i] = if (cur ==0L) 1else0 }
return ans
}
}
1
2
3
4
5
6
7
8
9
classSolution:
defdivisibilityArray(self, word: str, m: int) -> list[int]:
n = len(word)
ans = [0] * n
cur =0for i, ch in enumerate(word):
cur = (cur *10+ int(ch)) % m
ans[i] =1if cur ==0else0return ans
1
2
3
4
5
6
7
8
9
10
11
12
impl Solution {
pubfndivisibility_array(word: String, m: i32) -> Vec<i32> {
let n = word.len();
letmut ans =vec![0; n];
letmut cur =0i64;
for (i, ch) in word.chars().enumerate() {
cur = (cur *10+ (ch asi64-'0'asi64)) % m asi64;
ans[i] =if cur ==0 { 1 } else { 0 };
}
ans
}
}