[Leetcode] 231. Power of Two 解题报告

来源:互联网 发布:35位网络作家排名 编辑:程序博客网 时间:2024/06/05 08:03

题目

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

思路

2的幂的二进制表示有一个特点,就是除了最高位是1之外,其余的位置上都是0,依据这个特点,可以设计如下两个算法:

1、逐位判断:依次获取n的非最高位的值,一旦发现不是0,就返回false。这在算法实现上可以采用&和>>来实现。

2、一次判断:n & (n-1)的作用是将n的最低位上的1变成0。所以n是2的幂的充要条件就是 (n & (n - 1)) == 0。实现起来只需要一行代码。

不过大家需要注意,在C++中位操作的优先级比较低,所以记得加括弧^_^。

代码

1、逐位判断:

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

2、一次判断:

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

阅读全文
0 0