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

231. Power of Two

时间:2016-07-13 01:27:44      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

1. 问题描述

Given an integer, write a function to determine if it is a power of two.
Tags: Math Bit Manipulation
Similar Problems: (E) Number of 1 Bits (E) Power of Three (E) Power of Four

2. 解题思路

  该题判断某个给定的整数是否为2的次方数?

  首先,观察下2的次方数的二进制写法的特点:

  • 十进制:1   2    4    8    16   ….
  • 二进制:1   10   100  1000  10000    ….

可知,若某数是2的次方数,则其对应的二进数的最高位必然是1,且其它位均为0。

  • 思路一:若将该数减1,则最高位会降一位,其余为0的位现在都为变为1,再将两数相与,就会得到0,可利用该性质结题。
  • 思路二:每次判断最低位是否为1,然后向右移位,最后统计1的个数,即可判断是否是2的次方数。

3. 代码

思路1:

 1 class Solution {
 2 public:
 3     bool isPowerOfTwo(int n){
 4         if (n<=0)
 5         {
 6             return false;
 7         }
 8         return (n & (n-1)) == 0;
 9     }
10 };

思路2:

 1 class Solution {
 2 public:
 3     bool isPowerOfTwo(int n) {
 4         int count = 0;
 5         while (n > 0) 
 6         {
 7             count += (n & 1);
 8             n >>= 1;
 9         }
10         return count == 1;
11     } 
12 };

4. 反思

  • 举一反三:对于关于整数操作的题目,首先考虑位操作
  • 规律总结:一个数 n,如果是 2 的 N 次方,那么有:n & (n - 1) = 0

 

231. Power of Two

标签:

原文地址:http://www.cnblogs.com/whl2012/p/5665263.html

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