给你一个整数 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. UML中的六种关系的比较与学习
  2. 淘宝李晓拴:淘宝网PHP电子商务应用
  3. Harmonic Number(调和级数+欧拉常数)
  4. 使用c#实现tcp的连接和发送接收数据
  5. Python自学起飞——005
  6. cat /proc/maps 进程内存映射【转】
  7. MFC绘图的几种方法
  8. 吴恩达深度学习 —— 3.6 激活函数
  9. Golang通过syscall调用windows dll方法
  10. kvm虚拟机vnc和spice配置
  11. gdb官方说明文档中文版
  12. Python爬虫入门教程 68-100 一招解决爬虫程序卡死问题
  13. php怎么seo,怎样学习seo
  14. Python验证“哥德巴赫猜想”
  15. 大数据学习笔记之一:Hadoop 常用指令集合与启动注意项
  16. 什么是游戏美术设计?3D游戏建模常用的软件有哪些
  17. YOLOV5模型训练之JSON格式的数据集制作,一个py程序搞,搞不定邮件联系,我帮你!!!!
  18. msec 腾讯CICD程序框架发布
  19. 第三十三课第九章Storage Structure Relationships
  20. CPC (Contrastive Predictive Coding)

热门文章

  1. 南京Uber优步司机奖励政策(1月18日~1月24日)
  2. 吐血推荐cookie和session
  3. 行业研究报告-全球与中国PH/ORP变送器市场现状及未来发展趋势
  4. 复杂科学在创客教学研究中的应用
  5. web设置网页背景为好看炫酷的渐变色样式
  6. 小混混n多天不提编程,深刻反思
  7. Revit复制轴网和标高
  8. 因为需求理解不到位,视频自动播放列表又重写了
  9. 跨平台应用 Qt 对决 HTML5
  10. 联想造超级计算机,联想将造超级计算机 性能10倍于IBM蓝色基因