【每日一题】LeetCode 1680. 连接连续二进制数字
给你一个整数 \(n\) ,请你将 \(1\) 到 \(n\) 的二进制表示连接起来,并返回连接结果对应的十进制数字对 \(\left(10^9 + 7\right)\) 取余的结果。
本质上连接二进制可以视为反复乘以 \(2\) 的某个幂次再加上一个数,因此取模是正确的,直接模拟即可。
class Solution {
public:
int concatenatedBinary(int n) {
long long ans = 0;
const int mod = 1000000007;
for (int i = 1; i <= n; ++i) {
ans = ((ans << (std::__lg(i) + 1)) + i) % mod;
}
return ans;
}
};

浙公网安备 33010602011771号