สมมติว่าเรามีจำนวนเต็มบวก เราต้องตรวจสอบว่ามีบิตสลับกันหรือไม่ ดังนั้น บิตที่อยู่ติดกันสองบิตจะมีค่าต่างกันเสมอ
ดังนั้น หากอินพุตเท่ากับ 10 เอาต์พุตจะเป็น True เนื่องจากการแสดงไบนารีของ 10 คือ 1010
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- p :=n AND 1
- ถ้า n <2 แล้ว −
- คืนค่าจริง
- n :=n/2
- ในขณะที่ n ไม่ใช่ศูนย์ ให้ทำ −
- c :=n AND 1
- ถ้า c XOR p เหมือนกับ 0 แล้ว −
- คืนค่าเท็จ
- p :=c
- n :=n/2
- คืนค่าจริง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool hasAlternatingBits(int n) {
bool p=n&1;
bool c;
if(n<2)
return true;
n>>=1;
while(n){
c=n&1;
if(c^p==0)
return false;
p=c;
n>>=1;
}
return true;
}
};
main(){
Solution ob;
cout << (ob.hasAlternatingBits(10));
} อินพุต
10
ผลลัพธ์
1