problem

You are given a positive number n.

Return the smallest number x greater than or equal to n, such that the binary representation of x contains only set bits

 

Example 1:

Input: n = 5

Output: 7

Explanation:

The binary representation of 7 is "111".

Example 2:

Input: n = 10

Output: 15

Explanation:

The binary representation of 15 is "1111".

Example 3:

Input: n = 3

Output: 3

Explanation:

The binary representation of 3 is "11".

 

Constraints:

  • 1 <= n <= 1000

submission

impl Solution {
    pub fn smallest_number(n: i32) -> i32 {
        //        | the first set bit
        //    0000101..0
        // -> 0000111..1
        // -> 0001000..0 - 1
        (1 << (32 - n.leading_zeros())) - 1
    }
}