题目:
给你一个正整数 n
。
返回 大于等于 n
且二进制表示仅包含 置位 位的 最小 整数 x
。(全是1)
置位 位指的是二进制表示中值为 1
的位。
思路:计算 n 的二进制长度 m,返回长为 m 的全为 1 的二进制数,也就是2^m−1
代码:
java
class Solution {
public int smallestNumber(int n) {
int m = 32 - Integer.numberOfLeadingZeros(n);
// 1 左移 m 位,相当于 1 * 2^m
return (1 << m) - 1;
}
}
性能:
时间复杂度:O(1)
空间复杂度:O(1)