【231】判断是否是2的次幂--位运算相关
给你一个整数 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的次幂--位运算相关相关推荐
- 位运算判断奇偶数_位运算判断奇偶数
第一条:利用位运算判断一个整数是奇数还是偶数. 经常用到一个for循环,当索引i是奇数时执行语句A,偶数时执行语句B.判断i是奇数还是偶数,可用如下方法: if(i &1){ //i是奇数情况 ...
- C语言位操作--判断整数是否为2的幂
unsigned int v; // 判断v是否为2的幂 bool f; // f为判断的结果f = (v & (v - 1)) == 0; // 结果为0表示不是2 的幂// 改变表示方法, ...
- C语言中的位操作(4)--判断整数是否为2的幂
unsigned int v; // 判断v是否为2的幂 bool f; // f为判断的结果 f = (v & (v - 1)) == 0; // 结果为0表示不是2 的幂// 改变表示方法 ...
- JavaScript实现判断整数是否为2的幂isPowerOfTwo算法(附完整源码)
JavaScript实现判断整数是否为2的幂isPowerOfTwo算法(附完整源码) isPowerOfTwo.js完整源代码 isPowerOfTwo.js完整源代码 /*** @param {n ...
- 【Java】位运算判断2的N次幂
思考 如何判断一个数是不是2的N次幂? 难道要一直除下去?一直乘过去?还是打表? 我们就不能简单一些处理这个问题吗? 那就有了这篇博客的内容--位运算判断一个数是不是2的N次幂-- 核心算法 其实就是 ...
- LeetCode 342. 4的幂(位运算)
文章目录 1. 题目 2. 解题 2.1 通用解法 2.2 找规律 1. 题目 给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方. 示例 1: 输入: 16 输出: t ...
- 通过位运算来进行2的幂运算
今天给大家分享一道比较简单但是很经典的题目.话不多说,直接看题. 01.题目示例 这道题,大家先想一想是用什么思路进行求解? 第231题:2的幂 给定一个整数,编写一个函数来判断它是否是 2 的幂次方 ...
- LeetCode位运算(找出落单的数,二进制中1的个数,2的幂等)
文章目录 位运算理论+技巧介绍 1.与 & 2.异或 ^ 3.移位及综合运用(指定位置) 4.同或 开撸 1. lc136 只出现一次的数字 2. lc137 只出现一次的数字II 3. lc ...
- 疯子的算法总结(一) 位运算(快速幂、快速乘)
一.预备知识(补码,反码) 计算机通过二进制表示整形数,比如int型32位有符号整形数: 1表示为:0000-00001(共32位) -1表示为:1111-1111(共32位) 补码计算法定义:非负数 ...
最新文章
- UML中的六种关系的比较与学习
- 淘宝李晓拴:淘宝网PHP电子商务应用
- Harmonic Number(调和级数+欧拉常数)
- 使用c#实现tcp的连接和发送接收数据
- Python自学起飞——005
- cat /proc/maps 进程内存映射【转】
- MFC绘图的几种方法
- 吴恩达深度学习 —— 3.6 激活函数
- Golang通过syscall调用windows dll方法
- kvm虚拟机vnc和spice配置
- gdb官方说明文档中文版
- Python爬虫入门教程 68-100 一招解决爬虫程序卡死问题
- php怎么seo,怎样学习seo
- Python验证“哥德巴赫猜想”
- 大数据学习笔记之一:Hadoop 常用指令集合与启动注意项
- 什么是游戏美术设计?3D游戏建模常用的软件有哪些
- YOLOV5模型训练之JSON格式的数据集制作,一个py程序搞,搞不定邮件联系,我帮你!!!!
- msec 腾讯CICD程序框架发布
- 第三十三课第九章Storage Structure Relationships
- CPC (Contrastive Predictive Coding)