题目描述:
给你一个 正 整数 n 。
用 even 表示在 n 的二进制形式(下标从 0 开始)中值为 1 的偶数下标的个数。
用 odd 表示在 n 的二进制形式(下标从 0 开始)中值为 1 的奇数下标的个数。
返回整数数组 answer ,其中 answer = [even, odd] 。
解题思路:
由于我现在只接触了位运算,所以过程比较繁琐不是最优算法。我的思路是用判断语句把偶数情况和奇数情况分开,然后再去和1做位与判断二进制位是否是1,每次判断完在右移,下面是我的代码。
class Solution {
public int[] evenOddBit(int n) {
int even = 0; //统计下标中偶数1的个数
int odd = 0; //统计下标中奇数1的个数
int i = 1; //用与分辨是奇数位还是偶数位
while(n > 0){
if(i % 2 == 0){ //判断偶数位1的个数
if(( n & 1) == 1){
even += 1;
}
}else{ //判断奇数位1的个数
if((n & 1) == 1){
odd += 1;
}
}
i++;
n = n >>> 1;
}
int [] arr = new int [2];
arr[0] = odd;
arr[1] = even;
return arr;
}
}
总结:
在做这一题的时候逻辑上没有太大的错误,但是在记录1的个数的时候没有提前定义变量而是直接使用,主要问题还是代码量没有累计起来,在之后的做题中会更加注意。