列表

详情


6319. 奇偶位数

给你一个 整数 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 个奇数下标。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<int> evenOddBit(int n) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2023-03-19 21:48:42

func evenOddBit(n int) []int {
	const mask = 0x5555
	return []int{bits.OnesCount16(uint16(n & mask)), bits.OnesCount16(uint16(n & (mask >> 1)))}
}

java 解法, 执行用时: 1 ms, 内存消耗: 41.3 MB, 提交时间: 2023-03-19 21:48:29

class Solution {
    public int[] evenOddBit(int n) {
        final int MASK = 0x5555;
        return new int[]{Integer.bitCount(n & MASK), Integer.bitCount(n & (MASK >> 1))};
    }
}

python3 解法, 执行用时: 56 ms, 内存消耗: 14.8 MB, 提交时间: 2023-03-19 21:48:12

# 利用位掩码 0x5555 (二进制010101...) 取出偶数下标比特和奇数下标比特,分别用库函数统计1的个数
class Solution:
    def evenOddBit(self, n: int) -> List[int]:
        MASK = 0x5555
        return [(n & MASK).bit_count(), (n & (MASK >> 1)).bit_count()]

java 解法, 执行用时: 1 ms, 内存消耗: 41.3 MB, 提交时间: 2023-03-19 21:46:50

class Solution {
    public int[] evenOddBit(int n) {
        var ans = new int[2];
        for (int i = 0; n > 0; i ^= 1, n >>= 1)
            ans[i] += n & 1;
        return ans;
    }
}

golang 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2023-03-19 21:46:37

func evenOddBit(n int) []int {
	ans := make([]int, 2)
	for i := 0; n > 0; i ^= 1 {
		ans[i] += n & 1
		n >>= 1
	}
	return ans
}

python3 解法, 执行用时: 28 ms, 内存消耗: 14.7 MB, 提交时间: 2023-03-19 21:46:05

# 不断取最低位,然后右移,直到等于 0 为止,这样可以取到每个比特位。
class Solution:
    def evenOddBit(self, n: int) -> List[int]:
        ans = [0, 0]
        i = 0
        while n:
            ans[i] += n & 1
            n >>= 1
            i ^= 1
        return ans

上一题