题目来源
题目概述
给你一个下标从 0
开始的字符串 word
,长度为 n
,由从 0
到 9
的数字组成。另给你一个正整数 m
。
word
的 可整除数组 div
是一个长度为 n
的整数数组,并满足:
如果 word[0,...,i]
所表示的 数值 能被 m
整除,div[i] = 1
否则,div[i] = 0
返回 word
的可整除数组。
思路分析
思路一:使用Long.parseLong()、stoll()等内置函数来对字符串进行转换,但是字符串过长的话容易报错,而且事实证明力扣的用例就是这样子的。
思路二:记录上一次求模的结果作为本次被求模数的十位,将字符串本次遍历到的数据作为被求模数的个位,实践证明是可以实现的。
代码实现
java实现
public class Solution {
public int[] divisibilityArray(String word, int m) {
int[] res = new int[word.length()];
long last = 0;
for (int i = 0; i < word.length(); i++) {
long current = last * 10 + word.charAt(i) - '0';
last = current % m;
if (last == 0) {
res[i] = 1;
}
}
return res;
}
}
c++实现
class Solution {
public:
vector<int> divisibilityArray(string word, int m) {
vector<int> res(word.size());
long last = 0;
for (int i = 0; i < word.size(); i++) {
long current = last * 10 + word[i] - '0';
last = current % m;
if (last == 0) {
res[i] = 1;
}
}
return res;
}
};