-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathSolution.kt
71 lines (62 loc) · 1.47 KB
/
Solution.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
* Created by Inno Fang on 2017/12/29.
*/
// WA : 9
//class Solution {
// fun hasAlternatingBits(n: Int): Boolean {
// if (n != 0 && (n and 0b11) == 0) return false
// return (n shr 1 and n) == 0
// }
//}
// WA : 3
class Solution {
fun hasAlternatingBits(n: Int): Boolean {
var mask = n
mask = mask or (mask shr 1)
mask = mask or (mask shr 2)
mask = mask or (mask shr 4)
mask = mask or (mask shr 8)
mask = mask or (mask shr 16)
return ((n shr 1) xor n) == (mask)
}
}
class Solution2 {
fun hasAlternatingBits(n: Int): Boolean {
var n: Long = n.toLong()
return (n + (n shr 1) + 1) and (n + (n shr 1)) == 0L
}
}
class Solution3 {
fun hasAlternatingBits(n: Int): Boolean {
val a = n xor (n shr 1)
return a and (a + 1) == 0
}
}
fun main(args: Array<String>) {
assert(0, true)
assert(1, true)
assert(2, true)
assert(3, false)
assert(4, false)
assert(5, true)
assert(6, false)
assert(7, false)
assert(8, false)
assert(9, false)
assert(10, true)
assert(11, false)
assert(12, false)
assert(13, false)
assert(14, false)
assert(15, false)
assert(16, false)
assert(17, false)
assert(100, false)
assert(101, false)
}
var cas = 0
fun assert(n: Int, ans: Boolean) {
val solution = Solution()
val res = solution.hasAlternatingBits(n)
println("cas:${++cas}.\t[$n] \t${res == ans}")
}