693. Binary Number with Alternating Bits
题目描述和难度
- 题目描述:
给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。
示例 1:
输入: 5 输出: True 解释: 5的二进制数是: 101
示例 2:
输入: 7 输出: False 解释: 7的二进制数是: 111
示例 3:
输入: 11 输出: False 解释: 11的二进制数是: 1011
示例 4:
输入: 10 输出: True 解释: 10的二进制数是: 1010
- 题目难度:简单。
- 英文网址:693. Binary Number with Alternating Bits 。
- 中文网址:693. 交替位二进制数 。
思路分析
求解关键:很常规的一个问题了,
参考解答
参考解答1:这一版是我最开始的写法,比较常规,也很容易想到了。
public class Solution {
public boolean hasAlternatingBits(int n) {
// 题目说了是正数,所以负数可以直接排除了
if (n <= 0) {
return false;
}
boolean flag = ((n & 1) == 0);
while ((n != 0)) {
n >>= 1;
boolean curFlag = ((n & 1) == 0);
if (flag == curFlag) {
return false;
} else {
flag = curFlag;
}
}
// 这种检测,一定会将所有的数位都检查完,因此,
// 能运行到最后的,一定都会返回 true
return true;
}
public static void main(String[] args) {
Solution solution = new Solution();
int n = 10;
System.out.println(Integer.toBinaryString(n));
boolean hasAlternatingBits = solution.hasAlternatingBits(n);
System.out.println(hasAlternatingBits);
}
}
参考解答2:使用 Java 的库函数 Integer.toBinaryString(n)
经常可以解决大部分关于二进制的问题。
/**
* @author liwei
* @date 18/6/29 下午8:43
*/
public class Solution2 {
public boolean hasAlternatingBits(int n) {
String nStr = Integer.toBinaryString(n);
int len = nStr.length();
for (int i = 0; i < len - 1; i++) {
if (nStr.charAt(i) == nStr.charAt(i + 1)) {
return false;
}
}
return true;
}
}
参考解答3:使用 Java 的库函数 Integer.toBinaryString(n)
并结合正则表达式判断。
public class Solution3 {
public boolean hasAlternatingBits(int n) {
String nStr = Integer.toBinaryString(n);
// 因为是正数,所以一定以 1 开头
return nStr.matches("(10)*1?");
}
}
本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0693-binary-number-with-alternating-bits ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com 。