This is my LeetCode exercise.
You can see all question I did here.
leetcode Medium Math Bit Manipulation SimulationGiven an integer n, return the decimal value of the binary string formed by concatenating the binary representations of 1 to n in order, modulo $10^9 + 7$.
Input: n = 1
Output: 1
Explanation: “1” in binary corresponds to the decimal value 1.
Input: n = 3
Output: 27
Explanation: In binary, 1, 2, and 3 corresponds to “1”, “10”, and “11”.
After concatenating them, we have “11011”, which corresponds to the decimal value 27.
Input: n = 12
Output: 505379714
Explanation: The concatenation results in “1101110010111011110001001101010111100”.
The decimal value of that is 118505380540.
After modulo $10^9 + 7$, the result is 505379714.
int concatenatedBinary(int n) {
int mod = 1e9 + 7;
long ans = 0;
int size = 0;
for (int i = 1; i <= n; i++) {
if ((i & (i - 1)) == 0)
size++;
ans <<= size;
ans |= i;
ans %= mod;
}
return ans;
}
| Space | Time |
|---|---|
| $O(1)$ | $O(n)$ |
int GetBitSize(int number){
temp = number;
count=0;
while(temp!=0){
temp = temp>>1;
count++;
}
return count;
}
Directly count number length during each turn shifting number right 1 bit.
Its complexity is
| Space | Time |
|---|---|
| $O(1)$ | $O(log(n))$ |
int GetBitSize(int number){
int count = 0;
for(int i = 1 ; i <= number ; i++){
if ((i & (i - 1)) == 0)
count++;
}
return count;
}
Just like Kernighan’s Algorithm. Kernighan’s Algorithm wants to count how many set bit in a given number.
It uses the feature that AND operation of number and number - 1 will set the less significant setting bit. Like
| Number | Binary |
|---|---|
| N = 12 | 1100 |
| N-1 = 11 | 1011 |
| N & (N-1) = 8 | 1000 |
After then, setting new number as number & (number - 1), until the number become zero.
If we inverse this operation, we can find the length of binary increase as the number carries.
It is like the behavir of less significant setting bit works, only become zero as it carry(10...0 & 01...1)
| Number | Binary |
|---|---|
| N = 8 | 1000 |
| N-1 = 7 | 0111 |
| N & (N-1) = 0 | 0000 |
Its complexity is
| Space | Time |
|---|---|
| $O(1)$ | $O(n)$ |