[LeetCode231] Power of Two

题目:

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

判断是否是2的次方数

分类:Math Bit Manipulation

代码:

 1 class Solution {
 2 public:
 3     bool isPowerOfTwo(int n) {
 4         /*自己的方法
 5         if(n == 0)
 6             return false;
 7         vector<int> res;
 8         while(n)
 9         {
10             res.push_back(n % 2);
11             n /= 2;
12         }
13         //二进制是否只有最高位为1
14         int size = res.size();
15         for(int i = 0; i < size; ++i)
16         {
17             if(i != size - 1 && res[i] != 0)
18                 return false;
19             if(i == size - 1 && res[i] != 1)
20                 return false;
21         }
22         return true;
23         */
24         
25         /*
26         //通过移位数1的个数 n&1如果等于1说明二进制含有1
27         int count = 0;
28         while(n > 0)
29         {
30             count += (n & 0x01);
31             n >>= 1;
32         }
33         return count == 1;
34         */
35         
36         //同样是数1的个数,巧妙的利用n&(n-1)实现
37         return n > 0 && ((n &(n - 1)) == 0);
38     }
39 };

 

posted @ 2016-08-14 21:46  zhangbaochong  阅读(152)  评论(0)    收藏  举报