2575. Find the Divisibility Array of a String
Description
You are given a 0-indexed string word of length n consisting of digits, and a positive integer m.
The divisibility array div of word is an integer array of length n such that:
div[i] = 1if the numeric value ofword[0,...,i]is divisible bym, ordiv[i] = 0otherwise.
Return the divisibility array of word.
Example 1:
Input: word = "998244353", m = 3 Output: [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".
Example 2:
Input: word = "1010", m = 10 Output: [0,1,0,1] Explanation: There are only 2 prefixes that are divisible by 10: "10", and "1010".
Constraints:
1 <= n <= 105word.length == nwordconsists of digits from0to91 <= m <= 109
Solutions
Solution 1: Traversal + Modulo
Thinking
Mark whether each prefix integer is divisible by \(m\). Prefixes can be \(10^5\) digits, so the integers themselves cannot be built.
Remainders recur as \(x\leftarrow (10x+d)\bmod m\). A zero remainder writes \(1\), otherwise \(0\).
We iterate over the string word, using a variable \(x\) to record the modulo result of the current prefix with \(m\). If \(x\) is \(0\), then the divisible array value at the current position is \(1\), otherwise it is \(0\).
The time complexity is \(O(n)\), where \(n\) is the length of the string word. The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |