• 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 };
  • 相关阅读:
    hdu 3577 线段树
    hdu 5316 Magician 线段树
    POJ3468 本来是一道线段树
    hdu 3183 st表
    hdu 5285 BestCoder Round #48 ($) 1002 种类并查集
    hdu 5282 序列计数
    zoj 2432 模板LCIS
    hdu 1052 贪心
    Angular实践----定制你自己的指令
    Angular实践----理解数据绑定过程
  • 原文地址:https://www.cnblogs.com/VickyWang/p/6018939.html
Copyright © 2020-2023  润新知