양의 정수가 있다고 가정하고 비트가 교차하는지 확인해야 합니다. 따라서 인접한 두 비트는 항상 다른 값을 갖습니다.
따라서 입력이 10과 같으면 10의 이진 표현이 1010이므로 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- p :=n AND 1
- n <2이면 -
- 참을 반환
- n :=n/2
- n이 0이 아닌 동안 −
- 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