LeetCode每日一题:仅含置位位的最小整数
在LeetCode上,有一个简单难度的题目是“仅含置位位的最小整数”。题目要求找到一个整数,这个整数的二进制表示中所有的位都为1。根据题目的描述,我们可以推断出这个数一定是2的幂次减1。例如,如果n的二进制表示是101,那么结果就是2^3-1=7。解决这个问题的关键在于找到n的最高位,然后计算2的该位次幂减1。下面是一个Java代码示例,展示了如何实现这个算法:
public int smallestNumber(int n) {
int cnt = 0;
while (n != 1) {
cnt++;
n >>= 1;
}
return (1 << cnt + 1) - 1;
}这段代码的时间复杂度是O(logn),空间复杂度是O(1)。代码首先通过一个循环找到n的最高位,然后计算2的该位次幂减1,得到最终的结果。这个算法简洁而高效,非常适合解决这类问题。
评论已关闭