LeetCode刷题记录(二):交替位二进制数

134 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

交替位二进制数

题目如下图所示,也可以在LeetCode题目中找到此题。

图片

题目解析

这道题比较简单,从描述上来看,大概有两个重点信息;

  1. 十进制转二进制。

  2. 判断二进制结果是否存在连续相同的数字。

因为二进制只有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补齐