LeetCode:Binary Number with Alternating Bits(#693)

好久都没有写过博客了,大概一个月,一个字都没有写。乱七八糟的的事情有点多,再加上考试等,一个月也没有做什么。最近发现 LeetCode 上支持了 kotlin。算法的学习还是不能停止的,毕竟自己还是个渣。

估计以后的 LeetCode 上的题都是用 kotlin 刷了。

Binary Number with Alternating Bits(#693)

编号 名称 等级
693 Binary Number with Alternating Bits Easy

思路

这个题是要找到带有交替位的二进制数,比如 2(10), 5(101) ,这样的数字。

我的想法应该是相对来说比较笨的,就是先把数转为二进制数,再将二进制数分割位字符数组,对字符数组进行奇数偶数的选择。通过选择后判断奇偶位中的每一位是否相同。

第一次提交的时候就是这个样子想的,当提交代码的时候发现错了因为 7(111) 这个样子的并不符合奇偶交替,而是一样,所以在后面加了一个判断,判断奇偶位的内容是否一致,如果一样代表不成立。

当再次提交的时候发现忽略了 1 因为有了判断,所以1的偶位肯定是不存在的,这样的话就会判断出错误的结果,最后在开头添加这个判断。

代码

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
class Solution {
fun hasAlternatingBits(n: Int): Boolean {
if (n ==1 ){
return true
}
var flag = true
val a = Integer.toBinaryString(n)
val b: CharArray = a.toCharArray()
val c = ArrayList<Char>()
val d = ArrayList<Char>()
for (i in 0 until b.size) {
if (i % 2 == 0) {
c.add(b[i])
} else {
d.add(b[i])
}
}
var twp1 = '0'
var twp2 = '1'
if (c.size != 0) {
twp1 = c[0]
for (i in 1 until c.size) {
if (c[i] != twp1) {
flag = false
break
}
}
}
if (d.size != 0) {
twp2 = d[0]
for (i in 1 until d.size) {
if (d[i] != twp2) {
flag = false
break
}
}
}
if (twp1 == twp2) {
flag = false
}
return flag
}
}
不介意的话,可以请我喝杯咖啡吗?或扫一扫支付宝领红包