目标
给你一个 正 整数 n 。
用 even 表示在 n 的二进制形式(下标从 0 开始)中值为 1 的偶数下标的个数。
用 odd 表示在 n 的二进制形式(下标从 0 开始)中值为 1 的奇数下标的个数。
返回整数数组 answer ,其中 answer = [even, odd] 。
示例 1:
输入:n = 17
输出:[2,0]
解释:17 的二进制形式是 10001 。
下标 0 和 下标 4 对应的值为 1 。
共有 2 个偶数下标,0 个奇数下标。
示例 2:
输入:n = 2
输出:[0,1]
解释:2 的二进制形式是 10 。
下标 1 对应的值为 1 。
共有 0 个偶数下标,1 个奇数下标。
说明:
- 1 <= n <= 1000
思路
返回正整数 n
偶数比特位与奇数比特位为 1
的个数。
可以遍历 n
的 bit
位进行统计,也可以使用掩码调用库函数统计。
代码
/**
* @date 2025-02-20 8:39
*/
public class EvenOddBit2595 {
public int[] evenOddBit_v2(int n) {
// 提取偶数位 0101
int even = n & 0x55555555;
// 提取奇数位 1010
int odd = n & 0xAAAAAAAA;
return new int[]{Integer.bitCount(even), Integer.bitCount(odd)};
}
public int[] evenOddBit_v1(int n) {
int even = 0;
int odd = 0;
while (n > 0) {
even += n & 1;
n >>= 1;
odd += n & 1;
n >>= 1;
}
return new int[]{even, odd};
}
}