一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
交替位二进制数
题目如下图所示,也可以在LeetCode题目中找到此题。
题目解析
这道题比较简单,从描述上来看,大概有两个重点信息;
-
十进制转二进制。
-
判断二进制结果是否存在连续相同的数字。
因为二进制只有0和1,所以第二点就是要判断是否是0、1交替出现;也就是题目描述的信息。
我的解决过程
根据解析出来的两个重点信息,一一解决就可以了。
Java中十进制转二进制的方法有很多,日常开发中出现频率比较高的应该是Integer的静态方法parseInt。
Integer.parseInt('8', 2);
在LeetCode中,我尝试了一下这个方法,运行不成功。可能是没有相关的类吧,也可能是因为没有import相关的类,不过也没有多试。感兴趣的可以自行去试一下。
没有办法,只能通过循环来转换成二进制。
我们的最终目的不是获取二进制结果,是想判断是否存在连续的数值。所以,通过循环处理也最为合适。
开始编写
这道题具体的代码如下,其实思路也很简单。
就是通过十进制转二进制的规则,每次除以2进行取余,以此来判断是否进位。
再通过右移运算符>>来处理中间值。
class Solution {
public boolean hasAlternatingBits(int n) {
boolean flag = true;
int sum = 2;
int num;
while(n > 0){
num = n % 2;
if(sum != 1 && num != 0) {
sum = 1;
}else if(sum != 0 && num == 0){
sum = 0;
}else{
flag = false;
break;
}
n = n >> 1;
}
return flag;
}
}
补充一个知识点:
java中有三种移位运算符,分别是左移、右移、无符号右移,在数值计算方面使用这三种方式会更搞笑。
<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐