Mô tả bài toán
Cho số nguyên dương n, kiểm tra xem biểu diễn nhị phân có bit luân phiên không (hai bit liền kề luôn khác nhau).
Ví dụ: 10 (nhị phân 1010) → True.
Giải pháp (Kiểm tra bit)
- Lấy bit thấp nhất
p = n & 1. - Dịch phải
n >>= 1, lặp:- Bit hiện tại
c = n & 1. - Nếu
c ^ p == 0(hai bit giống nhau) → false. - Cập nhật
p = c, dịch tiếp.
- Bit hiện tại
- Nếu hết vòng lặp → true.
Ví dụ minh họa
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool hasAlternatingBits(int n) {
bool p = n & 1;
if (n < 2) return true;
n >>= 1;
while (n) {
bool c = n & 1;
if ((c ^ p) == 0) return false;
p = c;
n >>= 1;
}
return true;
}
};
int main() {
Solution ob;
cout << ob.hasAlternatingBits(10);
return 0;
}
Đầu vào
10
Đầu ra
1