zoukankan      html  css  js  c++  java
  • LeetCode | 2 的幂

    LeetCode 题库的第 231 题 —— 2 的幂

            这题也是比较容易的一题,前提是找到规律即可。如果从 10 进制的角度观察 2 的幂次方,可能并不容易发现规律,那么可以从 2 进制的角度进行观察。

            举例如下:

    1 2  = 2 ^ 1 = 10
    2 4  = 2 ^ 2 = 100
    3 8  = 2 ^ 3 = 1000
    4 16 = 2 ^ 4 = 10000

            观察 2 进制可以看出,2 的 N 次方只有 1 个 1,其余都是 0,那么判断一个数是否为 2 的幂,可以通过位移来进行判断。代码如下:

     1 bool isPowerOfTwo(int n) {
     2     int num = n;
     3     
     4     if ( n <= 0 ) return 0;
     5     
     6     while ( num > 1 ) {
     7         if ( num & 1 == 1 ) {
     8             return 0;
     9         }
    10         num = num >> 1;
    11     }
    12     
    13     return 1;
    14 }

            简单解释一下,如果一个数小于等于 0,那么它肯定不是 2 的幂,直接返回 0,num 必须要大于 1,否则直接返回 1,因为当 num 等于 1 时要么是循环结束,要么 num 本身就是 1,如果是 1 的话,就是 2 的 0 次幂。在循环中,不断的让 num 进行右移,并判断其最低位是否为 1 ,如果 num 大于 1,且 num 的最低位为 1,那么就不符合上面的规律了。就直接返回一个 0,如果循环中 num 的最低位都不为 1,那么最后就返回 1 即可。整个过程其实很简单,如果不太明白,那么最简单的方式就是将一个值转换为 2 进制,跟着调试一次即可。

     


    我的微信公众号:“码农UP2U”

     

  • 相关阅读:
    hdu 1176 免费馅饼
    算法竞赛入门经典训练指南-做题详细记录(更新中)
    poj-3250 Bad Hair Day
    poj-2823 Sliding Window
    2019.7.15-7.20暑假集训总结
    hdu 1754 I hate it
    poj 1611 The Suspects
    hdu 3038 How Many Answers Are Wrong
    hdu 1213 How Many Tables
    POJ 1182 食物链
  • 原文地址:https://www.cnblogs.com/tosser/p/11627766.html
Copyright © 2011-2022 走看看