128、交替位二進位制數
阿新 • • 發佈:2018-12-31
給定一個正整數,檢查他是否為交替位二進位制數:換句話說,就是他的二進位制數相鄰的兩個位數永不相等。
示例 1:
輸入: 5
輸出: True
解釋:
5的二進位制數是: 101
示例 2:
輸入: 7
輸出: False
解釋:
7的二進位制數是: 111
示例 3:
輸入: 11
輸出: False
解釋:
11的二進位制數是: 1011
示例 4:
輸入: 10
輸出: True
解釋:
10的二進位制數是: 1010
每次取出一個,跟目前的進行比較,沒什麼難度
程式碼:
class Solution { public boolean hasAlternatingBits(int n) { //是二的倍數或者是1或0那麼一定是的 if(n == 1 || n == 0){ return true; } int i = n % 2; n = n>>1; while ( n!=0 ) { int j = n % 2; if((i ^ j) == 0 ){ return false; }else { i = j; n = n >> 1; } } return true; } }
排名靠前的,不得不說思路很好,就是將一個數字與其右移一位後進行異或,如果是交替的數字,那麼異或之後都是1,那麼加一以後就是temp的最高位+1為1,那麼與原先的temp與之後就是0,這樣就完美解決了判斷的問題,
比如原先是101010,是交替的,那麼右移後為010101,異或就是111111,加1為1000000,與111111與就是0,是交替的,假如是101011,那麼右移一位就是010101,異或為111110,加一為111111,與之後為1,不是0,那麼就不是交替位二進位制數
class Solution { public boolean hasAlternatingBits(int n) { int temp=n^(n>>1); return (temp&(temp+1))==0; } }
這個排名也靠前很奇怪
class Solution {
public boolean hasAlternatingBits(int n) {
char[] chars = Integer.toBinaryString(n).toCharArray();
for (int i = 0; i < chars.length - 1; i++) {
if (chars[i] == chars[i + 1]) { return false; }
}
return true;
}
}