231. Power of Two

来源:互联网 发布:影楼网络销售工资待遇 编辑:程序博客网 时间:2024/06/07 01:47

题目:Power of Two

原题链接:https://leetcode.com/problems/power-of-two/
Given an integer, write a function to determine if it is a power of two.

给出一个整数,判断它是不是2的幂次方。

首先,如果整数小于等于0,那么肯定不是2的幂次方。
然后,2的幂次方在2进制位中的存储特点很明显,例如:
1 的二进制 0000 0001
2 的二进制 0000 0010
4 的二进制 0000 0100
8 的二进制 0000 1000
由此可以发现,2 的幂次的二进制表达式只有一位是1,其余都是0.
所以我们只要设计算法判断当前整数中二进制1的个数就行。

将 n 的二进制位中最右边的0一直移掉,直至遇到第一个1,然后再右移一次,如果是2的幂次方的话,那么此时2进制中应该没有了1,即n变成了0,判断是不是0即可。

代码如下:

class Solution {public:    bool isPowerOfTwo(int n) {        if (n <= 0) return false;        while(!(n & 1)) n = (n >> 1);        n = (n >> 1);        if (!n) return true;        else return false;    }};
0 0
原创粉丝点击