Sketch on a paper
Sometimes when you sketch something on a paper, solution comes easily. This one for example, I tried the most simplistic solution with a Big Integer, but ran into TLE. Looked at the hints, then you need to figure out the remainder i given the remainder i-1 (to some degree, this becomes a DP problem). On a piece of paper the relationship between i and i-1 becomes very obvious. Code is down below, cheers, ACC.
Find the Divisibility Array of a String - LeetCode
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
public int[] DivisibilityArray(string word, int m)
{
int[] retVal = new int[word.Length];
long[] remainder = new long[word.Length];
remainder[0] = (long)(word[0] - '0') % m;
retVal[0] = remainder[0] == 0 ? 1 : 0;
for (int i = 1; i < word.Length; i++)
{
long d = (long)(word[i] - '0');
remainder[i] = (10 * remainder[i - 1] + d) % m;
retVal[i] = remainder[i] == 0 ? 1 : 0;
}
return retVal;
}
Comments
Post a Comment