231. 2 的幂
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
示例 1:
示例 2:
示例 3:
示例 4:
示例 5:
提示:
迭代:数学模拟的方式,一直对n进行除2取余
func isPowerOfTwo(n int) bool {
// 迭代
if n < 1 {
return false
}
for n>1 {
if n%2==1 {
return false
}
n/=2
}
return true
}
递归:思路同迭代
func isPowerOfTwo(n int) bool {
// 递归
if n==1 {
return true
}
if n<1 {
return false
}
if n%2==1 {
return false
}
return isPowerOfTwo(n/2)
}
位运算:观察2的幂的数字二进制表示,如2【10】,4【100】,8【1000】,16【10000】,可以发现,2的幂的数字二进制里面只有一个1,可以使用n & (n - 1)将n唯一的一个1消去,应该返回0则是2的幂,同时n需要保持大于0。
func isPowerOfTwo(n int) bool {
// 位运算
return n>0 && n&(n-1)==0
}