1. 程式人生 > >【LeetCode】693. 交替位二進位制數

【LeetCode】693. 交替位二進位制數

1.題目

給定一個正整數,檢查他是否為交替位二進位制數:換句話說,就是他的二進位制數相鄰的兩個位數永不相等。
交替位二進位制數

2.思路

step1:十進位制轉換成二進位制,除二取餘。
step2:把這次的餘數(i)與下次的餘數(j)進行比較,若相等返回false

3.程式碼

bool hasAlternatingBits(int n) {
        int m=n;
        int i=-1,j=-1;
        while(m!=0){
        m=n/2;
        i=n%2;
        n=m;
        j=
n%2; if(i==j) return false; } return true; }

4.優秀案例

把所有符合的交替二進位制位的資料存放在s1,s2中,遍歷s1,s2,若沒有與n相等的,則證明n不屬於其中。

bool hasAlternatingBits(int n) {
       int s1 = 1;
       int s2 = 2;
       int t = 17;
       while(--t){
           if(s1==n||s2==n){
               return 1;
           }
s1 = s1*4+1;//結尾位1 s2 = s2*4+2;//結尾為0 } return 0;