给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。

如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。

示例 1:

输入:n = 1
输出:true
解释:20 = 1
示例 2:

输入:n = 16
输出:true
解释:24 = 16
示例 3:

输入:n = 3
输出:false
示例 4:

输入:n = 4
输出:true
示例 5:

输入:n = 5
输出:false

这里要求的是数值范围为

  • -2^31 <= n <= 2^31 - 1

我们只需要判断大于0的数就可以了,最初想法是循环32次取判断每位数字是0和1,对于2次幂的数字来说,其上为1个数应该只有1个。由此得到以下代码

class Solution(object):def isPowerOfTwo(self, n):""":type n: int:rtype: bool"""if n<=0:return False        idx = 0k1 = 0# 统计1的个数while idx<32:k = 1 if (n&1)==1 else 0k1 += kidx += 1n=n>>1        if k1>1:return Falseelse:return True

关于位运算的特殊技巧:

 1 n&(n-1)

将n的最后一位1置为0,则n&(n-1)==0,则n是2的次幂数

class Solution(object):def isPowerOfTwo(self, n):""":type n: int:rtype: bool"""return n>0 and n&(n-1)==0

2 n&(-n)

n&(-n)表示n最后一个1(其他位都置位0,只有最后一个1保留)。则n&(-n)==n,则是2的次幂

class Solution(object):def isPowerOfTwo(self, n):""":type n: int:rtype: bool"""return n>0 and n&(-n)==n

【231】判断是否是2的次幂--位运算相关相关推荐

  1. 位运算判断奇偶数_位运算判断奇偶数

    第一条:利用位运算判断一个整数是奇数还是偶数. 经常用到一个for循环,当索引i是奇数时执行语句A,偶数时执行语句B.判断i是奇数还是偶数,可用如下方法: if(i &1){ //i是奇数情况 ...

  2. C语言位操作--判断整数是否为2的幂

    unsigned int v; // 判断v是否为2的幂 bool f; // f为判断的结果f = (v & (v - 1)) == 0; // 结果为0表示不是2 的幂// 改变表示方法, ...

  3. C语言中的位操作(4)--判断整数是否为2的幂

    unsigned int v; // 判断v是否为2的幂 bool f; // f为判断的结果 f = (v & (v - 1)) == 0; // 结果为0表示不是2 的幂// 改变表示方法 ...

  4. JavaScript实现判断整数是否为2的幂isPowerOfTwo算法(附完整源码)

    JavaScript实现判断整数是否为2的幂isPowerOfTwo算法(附完整源码) isPowerOfTwo.js完整源代码 isPowerOfTwo.js完整源代码 /*** @param {n ...

  5. 【Java】位运算判断2的N次幂

    思考 如何判断一个数是不是2的N次幂? 难道要一直除下去?一直乘过去?还是打表? 我们就不能简单一些处理这个问题吗? 那就有了这篇博客的内容--位运算判断一个数是不是2的N次幂-- 核心算法 其实就是 ...

  6. LeetCode 342. 4的幂(位运算)

    文章目录 1. 题目 2. 解题 2.1 通用解法 2.2 找规律 1. 题目 给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方. 示例 1: 输入: 16 输出: t ...

  7. 通过位运算来进行2的幂运算

    今天给大家分享一道比较简单但是很经典的题目.话不多说,直接看题. 01.题目示例 这道题,大家先想一想是用什么思路进行求解? 第231题:2的幂 给定一个整数,编写一个函数来判断它是否是 2 的幂次方 ...

  8. LeetCode位运算(找出落单的数,二进制中1的个数,2的幂等)

    文章目录 位运算理论+技巧介绍 1.与 & 2.异或 ^ 3.移位及综合运用(指定位置) 4.同或 开撸 1. lc136 只出现一次的数字 2. lc137 只出现一次的数字II 3. lc ...

  9. 疯子的算法总结(一) 位运算(快速幂、快速乘)

    一.预备知识(补码,反码) 计算机通过二进制表示整形数,比如int型32位有符号整形数: 1表示为:0000-00001(共32位) -1表示为:1111-1111(共32位) 补码计算法定义:非负数 ...

最新文章

  1. 计算机考古:发现世界上最古老的用户手册
  2. [PAPER-RECORD]
  3. SAP ui5 ABAP repository handler class的 get_webcontent方法
  4. mix2线刷开发板救砖_小米Mix 2(安卓8.0)一键救砖教程,轻松刷回官方系统
  5. android 判断照片清晰度_手机如何拍出更清晰的照片?带你走进变焦与对焦的世界...
  6. What are your list of must know programming proverbs ?
  7. 编译原理实验-用FLEX自动构造词法分析程序
  8. oracle 查询去年同期,Oracle求近7日累計值和去年同期值
  9. 【机器学习基础】误差分析
  10. 幼儿园科学室创设特点
  11. HTML如何画一条分割线_div之间设置间隔
  12. [转贴]请珍惜你身边爱你的人
  13. R 和 Rstudio 在线更新
  14. input标签绑定click事件无反应
  15. 关于新中新二代身份证读卡器DKQ-A16D的一些问题
  16. java代码固定电话判断,Java 固话和手机归属地判断
  17. ubuntu18 安装jdk后报错Error occu‘r‘re‘d during initialization of VM
  18. 用计算机一级考试考的照片要求,全国计算机等级考试报名照片要求
  19. 到底是哪些人在玩链游?| 《区块链游戏玩家研究报告》
  20. 北京通州服务器维修,北京通州DNS服务器地址

热门文章

  1. docker镜像的分层理解,大白话跟你讲
  2. 真太极之只言片语 (续)
  3. java内部类的OC实现方法
  4. 【Vue3】利用watchEffect的清除副作用实现一个防抖函数
  5. 【干货】教你用python给你的微信朋友群发私人订制的藏头诗
  6. css:好看的渐变色_CSS渐变:语法速成课程
  7. python循环引用的解决办法
  8. matlab用diag直接使用错误_Matlab diag的用法
  9. Java基础之String类(第六天)
  10. 安装homebrew cask报错问题