位运算
func isPowerOfTwo(n int) bool {
count := 0
for n > 0 {
n = n &(n-1)
count++
}
if count == 1 {
return true
}
return false
}
这道题只要是 看 数字里面是否只有一个1就OK了。所以说 n = n &(n-1)
这种取消最后一位的1的做法 太太太重要了!
然后 还有一个是获取最后一个1的位置的 n &(-n)
就是。
代码改进
因为只要去掉1就是0就OK了,所以压根不需要计数
func isPowerOfTwo(n int) bool {
if n != 0 && n &(n-1) == 0{ // 直接判断 n不等于0 去掉一位等于0 即可。
return true
}
return false
}