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

    Problem:

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

    Summary:

    判断一个数n是不是2的整数幂。

    Analysis:

    这道题首先需要注意n为非整数是返回false的情况。

    1. 若将n转换为二进制数,如果n为2的整数幂,则转换得到的二进制数只包含一个一,故计算转换过程中1的个数,最终判断。

     1 class Solution {
     2 public:
     3     bool isPowerOfTwo(int n) {
     4         int cnt = 0;
     5         
     6         while (n > 0) {
     7             if (n % 2) {
     8                 cnt++;
     9             }
    10             n /= 2;
    11         }
    12         
    13         return cnt == 1 ? true : false;
    14     }
    15 };

    可以简化为位操作的形式,如下:

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

    2. 经过查网上大牛的代码,学到了一个神奇的技巧:当一个数n为2的整数幂时,其二进制最高位必为1,其余位数都为0。那么n-1最高位为0,其余位数均为1。则若n & (n -1)为0时,n必为2的整数幂。

    1 class Solution {
    2 public:
    3     bool isPowerOfTwo(int n) {
    4         return (n > 0) && !(n & (n - 1));
    5     }
    6 };
  • 相关阅读:
    RxJava+okhttp3
    RetrofitOkHttp网络请求
    布局111
    网络请求展示数据
    一级列表展示购物车
    终极MVP二级购物车
    将博客搬至CSDN
    nyoj-开灯问题
    nyoj-数乌龟
    nyoj 正三角形的外接圆面积
  • 原文地址:https://www.cnblogs.com/VickyWang/p/6018939.html
Copyright © 2011-2022 走看看