LeetCode No.231 [Power of Two]

Description

Given an integer, write a function to determine if it is a power of two.

Leet Code Link


愚蠢的实现方式

这种题目第一时间的反应就是转换为二进制判断最高位是否为1且其余地位是否为0
于是乎只要判断不为0的情况下所有位数为0即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func isPowerOfTwo(n int) bool {
if n == 0 {
return false
}
format := strconv.FormatInt(int64(n), 2)
for i := 1; i < len(format); i++ {
if format[i] == '1' {
return false
}
}
return true
}

聪明的实现方式

其实不必要那么麻烦,简单的判断方式是将n和n-1做与(&)运算…

1
2
3
func isPowerOfTwo(n int) bool {
return (n&(n-1) == 0 && n > 0)
}