奇偶位数

发布时间 2023-07-25 20:26:28作者: 网抑云黑胶SVIP用户

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/number-of-even-and-odd-bits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

真正的屎山代码

class Solution {
    public int[] evenOddBit(int n) {
        //先把整形变为String
        int[] result = new int[2];
        int count = 0;
        String bit = "";
        while(n!=0){
            bit+=n%2;
            n/=2;
        }
        //根据String判断奇偶更新result
        for(int i=0;i<bit.length();i++){
            if(i%2==0&&bit.charAt(i)=='1'){
                result[0]++;
            }else if(i%2!=0&&bit.charAt(i)=='1'){
                result[1]++;
            }
        }
        return result;
    }
}

直接判断余数,并且计数器取反就能得到奇偶位数频率

class Solution {
    public int[] evenOddBit(int n) {
        int[] result = new int[2];
        int count = 0;
        //判断余数是否为1,因为计数器从0开始,所以我们取反,奇数代表even增加,偶数代表odd增加
        while(n!=0){
            if(n%2==1&&count%2!=0){
                result[1]++;
            } else if (n%2==1&&count%2==0) {
                result[0]++;
            }
            n/=2;
            count++;
        }
        return result;
    }
}