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
Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 如下
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
沒有留言:
張貼留言