comments | difficulty | edit_url | tags | |||
---|---|---|---|---|---|---|
true |
中等 |
|
给定一个整数 n
,返回 最大的 整数 x
使得 x <= n
,并且所有在范围 [x, n]
内的数字的按位 AND
为 0。
示例 1:
输入:n = 7
输出:3
解释:
[6, 7]
的按位 AND
为 6。
[5, 6, 7]
的按位 AND
为 4。
[4, 5, 6, 7]
的按位 AND
为 4。
[3, 4, 5, 6, 7]
的按位 AND
为 0。
示例 2:
输入:n = 9
输出:7
解释:
[7, 8, 9]
的按位 AND
为 0。
示例 3:
输入:n = 17
输出:15
解释:
[15, 16, 17]
的按位 AND
为 0。
提示:
1 <= n <= 1015
我们可以找到
时间复杂度
class Solution:
def maxNumber(self, n: int) -> int:
return (1 << (n.bit_length() - 1)) - 1
class Solution {
public long maxNumber(long n) {
return (1L << (63 - Long.numberOfLeadingZeros(n))) - 1;
}
}
class Solution {
public:
long long maxNumber(long long n) {
return (1LL << (63 - __builtin_clzll(n))) - 1;
}
};
func maxNumber(n int64) int64 {
return int64(1<<(bits.Len64(uint64(n))-1)) - 1
}