File tree 5 files changed +170
-18
lines changed
solution/0600-0699/0693.Binary Number with Alternating Bits
5 files changed +170
-18
lines changed Original file line number Diff line number Diff line change 44
44
45
45
<!-- 这里可写通用的实现逻辑 -->
46
46
47
- 假设 01 交替出现,那么我们可以通过错位异或将尾部全部转为 1,加 1 可以得到 2 的幂次的一个数 n(n 中只有一个位是 1),接着利用 ` n & (n - 1) ` 可以消除最后一位的 1。
47
+ ** 方法一:模拟**
48
+
49
+ n 循环右移直至为 0,依次检测 n 的二进制位是否交替出现。若循环过程中发现 0、1 没有交替出现,直接返回 false。否则循环结束返回 true。
50
+
51
+ ** 方法二:位运算**
52
+
53
+ 假设 01 交替出现,那么我们可以通过错位异或将尾部全部转为 1,加 1 可以得到 2 的幂次的一个数 n(n 中只有一个位是 1),接着利用 ` n & (n + 1) ` 可以消除最后一位的 1。
48
54
49
55
此时判断是否为 0,若是,说明假设成立,是 01 交替串。
50
56
57
63
``` python
58
64
class Solution :
59
65
def hasAlternatingBits (self , n : int ) -> bool :
60
- n = (n ^ (n >> 1 )) + 1
61
- return (n & (n - 1 )) == 0
66
+ prev = - 1
67
+ while n:
68
+ curr = n & 1
69
+ if prev == curr:
70
+ return False
71
+ prev = curr
72
+ n >>= 1
73
+ return True
74
+ ```
75
+
76
+ ``` python
77
+ class Solution :
78
+ def hasAlternatingBits (self , n : int ) -> bool :
79
+ n ^= (n >> 1 )
80
+ return (n & (n + 1 )) == 0
62
81
```
63
82
64
83
### ** Java**
@@ -68,14 +87,48 @@ class Solution:
68
87
``` java
69
88
class Solution {
70
89
public boolean hasAlternatingBits (int n ) {
71
- n = (n ^ (n >> 1 )) + 1 ;
72
- return (n & (n - 1 )) == 0 ;
90
+ int prev = - 1 ;
91
+ while (n != 0 ) {
92
+ int curr = n & 1 ;
93
+ if (prev == curr) {
94
+ return false ;
95
+ }
96
+ prev = curr;
97
+ n >> = 1 ;
98
+ }
99
+ return true ;
100
+ }
101
+ }
102
+ ```
103
+
104
+ ``` java
105
+ class Solution {
106
+ public boolean hasAlternatingBits (int n ) {
107
+ n ^ = (n >> 1 );
108
+ return (n & (n + 1 )) == 0 ;
73
109
}
74
110
}
75
111
```
76
112
77
113
### ** C++**
78
114
115
+ ``` cpp
116
+ class Solution {
117
+ public:
118
+ bool hasAlternatingBits(int n) {
119
+ int prev = -1;
120
+ while (n)
121
+ {
122
+ int curr = n & 1;
123
+ if (prev == curr) return false;
124
+ prev = curr;
125
+ n >>= 1;
126
+ }
127
+ return true;
128
+ }
129
+ };
130
+ ```
131
+
79
132
```cpp
80
133
class Solution {
81
134
public:
@@ -115,6 +168,30 @@ impl Solution {
115
168
}
116
169
```
117
170
171
+ ### ** Go**
172
+
173
+ ``` go
174
+ func hasAlternatingBits (n int ) bool {
175
+ prev := -1
176
+ for n != 0 {
177
+ curr := n & 1
178
+ if prev == curr {
179
+ return false
180
+ }
181
+ prev = curr
182
+ n >>= 1
183
+ }
184
+ return true
185
+ }
186
+ ```
187
+
188
+ ``` go
189
+ func hasAlternatingBits (n int ) bool {
190
+ n ^= (n >> 1 )
191
+ return (n & (n + 1 )) == 0
192
+ }
193
+ ```
194
+
118
195
### ** ...**
119
196
120
197
```
Original file line number Diff line number Diff line change 45
45
``` python
46
46
class Solution :
47
47
def hasAlternatingBits (self , n : int ) -> bool :
48
- n = (n ^ (n >> 1 )) + 1
49
- return (n & (n - 1 )) == 0
48
+ prev = - 1
49
+ while n:
50
+ curr = n & 1
51
+ if prev == curr:
52
+ return False
53
+ prev = curr
54
+ n >>= 1
55
+ return True
56
+ ```
57
+
58
+ ``` python
59
+ class Solution :
60
+ def hasAlternatingBits (self , n : int ) -> bool :
61
+ n ^= (n >> 1 )
62
+ return (n & (n + 1 )) == 0
50
63
```
51
64
52
65
### ** Java**
53
66
54
67
``` java
55
68
class Solution {
56
69
public boolean hasAlternatingBits (int n ) {
57
- n = (n ^ (n >> 1 )) + 1 ;
58
- return (n & (n - 1 )) == 0 ;
70
+ int prev = - 1 ;
71
+ while (n != 0 ) {
72
+ int curr = n & 1 ;
73
+ if (prev == curr) {
74
+ return false ;
75
+ }
76
+ prev = curr;
77
+ n >> = 1 ;
78
+ }
79
+ return true ;
80
+ }
81
+ }
82
+ ```
83
+
84
+ ``` java
85
+ class Solution {
86
+ public boolean hasAlternatingBits (int n ) {
87
+ n ^ = (n >> 1 );
88
+ return (n & (n + 1 )) == 0 ;
59
89
}
60
90
}
61
91
```
62
92
63
93
### ** C++**
64
94
95
+ ``` cpp
96
+ class Solution {
97
+ public:
98
+ bool hasAlternatingBits(int n) {
99
+ int prev = -1;
100
+ while (n)
101
+ {
102
+ int curr = n & 1;
103
+ if (prev == curr) return false;
104
+ prev = curr;
105
+ n >>= 1;
106
+ }
107
+ return true;
108
+ }
109
+ };
110
+ ```
111
+
65
112
```cpp
66
113
class Solution {
67
114
public:
@@ -101,6 +148,30 @@ impl Solution {
101
148
}
102
149
```
103
150
151
+ ### ** Go**
152
+
153
+ ``` go
154
+ func hasAlternatingBits (n int ) bool {
155
+ prev := -1
156
+ for n != 0 {
157
+ curr := n & 1
158
+ if prev == curr {
159
+ return false
160
+ }
161
+ prev = curr
162
+ n >>= 1
163
+ }
164
+ return true
165
+ }
166
+ ```
167
+
168
+ ``` go
169
+ func hasAlternatingBits (n int ) bool {
170
+ n ^= (n >> 1 )
171
+ return (n & (n + 1 )) == 0
172
+ }
173
+ ```
174
+
104
175
### ** ...**
105
176
106
177
```
Original file line number Diff line number Diff line change
1
+ func hasAlternatingBits (n int ) bool {
2
+ n ^= (n >> 1 )
3
+ return (n & (n + 1 )) == 0
4
+ }
Original file line number Diff line number Diff line change 1
- class Solution {
2
- public boolean hasAlternatingBits (int n ) {
3
- n = (n ^ ( n >> 1 )) + 1 ;
4
- return (n & (n - 1 )) == 0 ;
5
- }
1
+ class Solution {
2
+ public boolean hasAlternatingBits (int n ) {
3
+ n ^ = (n >> 1 );
4
+ return (n & (n + 1 )) == 0 ;
5
+ }
6
6
}
Original file line number Diff line number Diff line change 1
- class Solution :
2
- def hasAlternatingBits (self , n : int ) -> bool :
3
- n = (n ^ ( n >> 1 )) + 1
4
- return (n & (n - 1 )) == 0
1
+ class Solution :
2
+ def hasAlternatingBits (self , n : int ) -> bool :
3
+ n ^ = (n >> 1 )
4
+ return (n & (n + 1 )) == 0
You can’t perform that action at this time.
0 commit comments