zoukankan      html  css  js  c++  java
  • Leetcode 231. 2的幂 数学

    地址 https://leetcode-cn.com/problems/power-of-two/

    给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
    
    示例 1:
    
    输入: 1
    输出: true
    解释: 20 = 1
    示例 2:
    
    输入: 16
    输出: true
    解释: 24 = 16
    示例 3:
    
    输入: 218
    输出: false

    解法一 第一反应是打表 ac .但是时间上不是最优

     1 class Solution {
     2 public:
     3 set<int> s ={
     4     1,
     5 2,
     6 4,
     7 8,
     8 16,
     9 32,
    10 64,
    11 128,
    12 256,
    13 512,
    14 1024,
    15 2048,
    16 4096,
    17 8192,
    18 16384,
    19 32768,
    20 65536,
    21 131072,
    22 262144,
    23 524288,
    24 1048576,
    25 2097152,
    26 4194304,
    27 8388608,
    28 16777216,
    29 33554432,
    30 67108864,
    31 134217728,
    32 268435456,
    33 536870912,
    34 1073741824
    35 };
    36     bool isPowerOfTwo(int n) {
    37        if(s.count(n) != 0) return true;
    38 
    39         return false;
    40     }
    41 };
    View Code

    解法二 一个小技巧(简单题目很多都是需要这种小技巧)

    如果n能够确认是 由一个1 和全部零组成的二进制数字 那么它肯定是2的幂

    恰好

    n&-n 返回的是n的二进制 数位上第一个1和0 组成的数字

    那么代码如下

    1 class Solution {
    2 public:
    3     bool isPowerOfTwo(int n) {
    4         if(n>0 && (n&-n) == n) return true;
    5         return false;
    6     }
    7 };
    View Code
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    观察者模式
    策略模式
    设计模式之Template Method
    面向对象设计原则
    设计模式简介
    封装Server类和Client类
    为客户端添加输入线程
    客户端升级为select网路模型
    将服务端select设置为非阻塞,处理更多业务
    Laradock 使用中遇到的问题汇总
  • 原文地址:https://www.cnblogs.com/itdef/p/12815089.html
Copyright © 2011-2022 走看看