码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode笔记:Power of two

时间:2015-09-11 06:47:24      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:leetcode   c++   power   algorithm   位运算   

一. 题目描述

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

二.题目分析

该题要求简单,给定一个整数,判断其是不是2的整数次幂,这道题的解题关键是找到一个规律:如果一个数字是2的整数次幂,若将该数写为二进制数,这个二进制数中有且仅有一位为1,其余均为0。根据这一性质,不难给出以下给出两种解决方法。

三.示例代码

// 将n不停右移,比较二进制数中1出现的个数,count = 1时判定为ture
bool isPowerOfTwo(int n) {  
    int count = 0;  
    while (n > 0)  
    {  
        count+=(n&0x01);   
        n>>=1;  
    }  
    if(sum==1)
        return true;
    else
        return false;
}

以下方法同样利用了一个2的整数次幂的二进制写法中有且仅有一位为1的性质。假设该数为n,根据这一性质,则(n - 1)必然是将n的最高位10,然后其余二进制位均置1,当且仅当这种情况下,有(n&(n-1)) == 0,一个例子:

n = 8 -> 1000
n - 1 = 7 -> 0111
则有:1000 & 0111 = 0000

class Solution {  
public:  
    bool isPowerOfTwo(int n) {  
        return (n>0) && (!(n&(n-1)));  
    }  
};  

版权声明:本文为博主原创文章,未经博主允许不得转载。

leetcode笔记:Power of two

标签:leetcode   c++   power   algorithm   位运算   

原文地址:http://blog.csdn.net/liyuefeilong/article/details/48360267

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!