奇偶位数
给你一个 正 整数 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;
}
}