g1601_1700.s1680_concatenation_of_consecutive_binary_numbers.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g1601_1700.s1680_concatenation_of_consecutive_binary_numbers;
// #Medium #Math #Bit_Manipulation #Simulation
// #2022_04_15_Time_70_ms_(95.05%)_Space_39.2_MB_(98.02%)
/**
* 1680 - Concatenation of Consecutive Binary Numbers\.
*
* Medium
*
* Given an integer `n`, return _the **decimal value** of the binary string formed by concatenating the binary representations of_ `1` _to_ `n` _in order, **modulo**_ 109 + 7
.
*
* **Example 1:**
*
* **Input:** n = 1
*
* **Output:** 1
*
* **Explanation:** "1" in binary corresponds to the decimal value 1.
*
* **Example 2:**
*
* **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.
*
* **Example 3:**
*
* **Input:** n = 12
*
* **Output:** 505379714
*
* **Explanation:** The concatenation results in "1101110010111011110001001101010111100".
*
* The decimal value of that is 118505380540.
*
* After modulo 109 + 7, the result is 505379714.
*
* **Constraints:**
*
* * 1 <= n <= 105
**/
public class Solution {
private static final long MOD = 1000_000_007;
public int concatenatedBinary(int n) {
// calculate the length of binary string
int length = 0;
long sum = 0;
for (int i = 1; i <= n; i++) {
if ((i & i - 1) == 0) {
length++;
}
sum <<= length;
sum += i;
if (sum > MOD) {
sum %= MOD;
}
}
return (int) (sum % MOD);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy