版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24133491/article/details/83068010
Description:
Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.
Example 1:
Input: 5
Output: True
Explanation:
The binary representation of 5 is: 101
Example 2:
Input: 7
Output: False
Explanation:
The binary representation of 7 is: 111.
Example 3:
Input: 11
Output: False
Explanation:
The binary representation of 11 is: 1011.
Example 4:
Input: 10
Output: True
Explanation:
The binary representation of 10 is: 1010.
题意:判断一个正整数的二进制表示中相邻的位是否是不同的;
解法:一种想法是可以在求解其二进制表示时,判断当前求得的位是否和上一次求得的不同来判断是否所有相邻的位都不同;另外一种想法是,对于32位正整数来说,如果满足相邻的位都是不同的,那么一定是下面两个二进制表示中的子串;
String str1 = “0101010 10101010 10101010 10101010”;
String str2 = “1010101 01010101 01010101 01010101”;
Java
class Solution {
public boolean hasAlternatingBits(int n) {
String str1 = "0101010101010101010101010101010";
String str2 = "1010101010101010101010101010101";
StringBuilder sb = new StringBuilder();
while (n > 0) {
sb.insert(0, n % 2);
n /= 2;
}
return sb.toString().equals(str1.substring(str1.length() - sb.length())) ||
sb.toString().equals(str2.substring(str2.length() - sb.length())) ? true : false;
}
}