关闭

Leetcode NO.231 Power of Two

标签: C++leetcode算法位运算
257人阅读 评论(0) 收藏 举报
分类:

本题题目要求如下:

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;
    }
};


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:59002次
    • 积分:2057
    • 等级:
    • 排名:第18583名
    • 原创:156篇
    • 转载:0篇
    • 译文:0篇
    • 评论:8条
    最新评论