zoukankan      html  css  js  c++  java
  • 231. Power of Two

    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
  • 相关阅读:
    方法中的散列可变参数
    方法中的散列可变参数
    策略模式
    策略模式
    HashSet,TreeSet
    HashSet,TreeSet
    ArrayList和LinkedList
    ArrayList和LinkedList
    关于鼠标悬浮标签元素效果(CSS:cursor属性)
    关于鼠标悬浮标签元素效果(CSS:cursor属性)
  • 原文地址:https://www.cnblogs.com/whl2012/p/5665263.html
Copyright © 2011-2022 走看看