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


阅读更多
个人分类: Leetcode
上一篇Leetcode NO.228 Summary Ranges
下一篇Leetcode NO.234 Palindrome Linked List
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭