0
点赞
收藏
分享

微信扫一扫

231. 2 的幂、Leetcode的Go实现

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
}
举报

相关推荐

0 条评论