1. 题目来源
2. 题目解析
一道中等题,通过率只有30%,编码只用了30s…1A…
思路:
- 常用取模公式: ( a ∗ 10 + b ) % m = = ( a % m ∗ 10 + b % m ) % m (a*10+b)\% m==(a \% m * 10 + b \% m)\% m (a∗10+b)%m==(a%m∗10+b%m)%m
- 由上式可得:当前字符串所代表的数字,能否被 m 整除。等价于前一个字符串与 m 的余数+当前数字的和,这个和能否被 m 整除。
- 注意,这里有 x * 10 这种操作,在边界情况下会爆 int,类似此类操作,最好将数据类型变为 LL 进行处理。
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
class Solution {
public:
typedef long long LL;
vector<int> divisibilityArray(string word, int m) {
vector<int> res;
LL x = 0;
for (char c : word) {
x = (x * 10ll + c - '0') % m;
res.push_back(x == 0);
}
return res;
}
};