题目
题目描述
给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。
示例 1:
输入:n = 5 输出:true 解释:5 的二进制表示是:101
示例 2:
输入:n = 7 输出:false 解释:7 的二进制表示是:111.
示例 3:
输入:n = 11 输出:false 解释:11 的二进制表示是:1011.
示例 4:
输入:n = 10 输出:true 解释:10 的二进制表示是:1010.
示例 5:
输入:n = 3 输出:false
提示:
来源
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-number-with-alternating-bits 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
解法1
class Solution {
public boolean hasAlternatingBits(int n) {
String binaryStr = Integer.toBinaryString(n);
char[] chars = binaryStr.toCharArray();
for (int i = 0; i < chars.length - 1; i++) {
if (chars[i] == chars[i + 1]) {
return false;
}
}
return true;
}
}
解法2
public class Solution {
public boolean hasAlternatingBits(int n) {
String binaryStr = Integer.toBinaryString(n);
return !binaryStr.contains("11") && !binaryStr.contains("00");
}
}
解法3
public class Solution {
public boolean hasAlternatingBits(int n) {
String binaryStr = Integer.toBinaryString(n);
char[] chars = binaryStr.toCharArray();
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < chars.length; i++) {
if (!map.containsKey(chars[i])) {
map.put(chars[i], i);
} else {
if (i - map.get(chars[i]) == 2) {
map.put(chars[i], i);
} else {
return false;
}
}
}
return true;
}
}
解法4
public class Solution {
public boolean hasAlternatingBits(int n) {
int last = -1;
while (n > 0) {
if (last == n % 2) {
return false;
}
last = n % 2;
n /= 2;
}
return true;
}
}
解法5
public class Solution {
public boolean hasAlternatingBits(int n) {
n = (n ^ (n >> 1));
return (n & (n + 1)) == 0;
}
}
|