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