Leetcode NO.231 Power of Two

本题题目要求如下:

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

很简单的要求,不过一开始我居然没有想到解决问题的办法,用一种很傻的方法做的,后来感觉不对,看了提示,用位运算解决,才恍然大悟,用简单方法解决了问题。。

power of 2的数看十进制,没有什么特别的地方,但是转换成二进制之后,都是100000的形式,最高位是1,其余位都是0,然后,这个数减1,就变为011111,最高位(已消失)为0,之后都是1,所以这两个数按位与(&)则变为0000000000.。。根据这个特性,可以解决这道题,代码如下:

class Solution {
public:
    bool isPowerOfTwo(int n) {
        if (n <= 0) {
            return false;
        }
        return !(n & (n-1));
    }
};

更新一种更为传统的做法:

public:
    bool isPowerOfTwo(int n) {
        if (n <= 0) {
            return false;
        }
        while ((n >> 1) << 1 == n) {
            n >>= 1;
        }
        return (n == 1) ? true: false;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值