2018年6月7日 星期四

[LeetCode] 693. Binary Number with Alternating Bits

轉自LeetCode

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.
<Solution>

想法如下
  • 先找出 LSB 是 1 還是 0,然後一個一個 bit 檢查是否是預期的答案。例如 LSB 是 0 的話,下一個 bit 就應該是 1,再下一個 bit 是 0
code 如下

Java
class Solution {
public boolean hasAlternatingBits(int n) {
int status = n & 1;
while(n != 0) {
if((n & 1) != status) {
return false;
}
n >>= 1;
status = 1 - status;
}
return true;
}
}

Java 還可以利用一些內建函式來解

code 如下
class Solution {
public boolean hasAlternatingBits(int n) {
String s = Integer.toBinaryString(n);
final int len = s.length();
for(int i = 1; i < s.length(); i++) {
if(s.charAt(i) == s.charAt(i-1)) {
return false;
}
}
return true;
}
}

沒有留言:

張貼留言