[LeetCode] Power of Two 判断2的次方数
Given an integer, write a function to determine if it is a power of two.
Example 1:
Input: 1 Output: true
Example 2:
Input: 16 Output: true
Example 3:
Input: 218 Output: false
这道题让我们判断一个数是否为2的次方数,而且要求时间和空间复杂度都为常数,那么对于这种玩数字的题,我们应该首先考虑位操作 Bit Operation。在LeetCode中,位操作的题有很多,比如比如 Repeated DNA Sequences,Single Number, Single Number II, Grey Code, Reverse Bits,Bitwise AND of Numbers Range,Number of 1 Bits 和 Divide Two Integers 等等。那么我们来观察下2的次方数的二进制写法的特点:
1 2 4 8 16 ....
1 10 100 1000 10000 ....
那么我们很容易看出来2的次方数都只有一个1,剩下的都是0,所以我们的解题思路就有了,我们只要每次判断最低位是否为1,然后向右移位,最后统计1的个数即可判断是否是2的次方数,代码如下:
解法一:
class Solution { public:bool isPowerOfTwo(int n) {int cnt = 0;while (n > 0) {cnt += (n & 1);n >>= 1;}return cnt == 1;} };
这道题还有一个技巧,如果一个数是2的次方数的话,根据上面分析,那么它的二进数必然是最高位为1,其它都为0,那么如果此时我们减1的话,则最高位会降一位,其余为0的位现在都为变为1,那么我们把两数相与,就会得到0,用这个性质也能来解题,而且只需一行代码就可以搞定,如下所示:
解法二:
class Solution { public:bool isPowerOfTwo(int n) {return (n > 0) && (!(n & (n - 1)));} };
类似题目:
Number of 1 Bits
Power of Four
Power of Three
参考资料:
https://leetcode.com/problems/power-of-two/discuss/63974/Using-nand(n-1)-trick
https://leetcode.com/problems/power-of-two/discuss/63972/One-line-java-solution-using-bitCount
LeetCode All in One 题目讲解汇总(持续更新中...)
[LeetCode] Power of Two 判断2的次方数相关推荐
- [leetcode] Power of Two 判断一个数是否是2的平方
bool isPowerOfTwo(int n) {int count = 0;int i = 0;if(n < 0)return false;for(i = 0; i < sizeof( ...
- C语言每日一练——第79天:高次方数的尾数
C语言每日一练 2022年1月27日 文章目录 题目描述 问题分析 代码实现 运行结果 题目描述 求13的13次方的最后三位数 问题分析 根据乘法竖式计算我们可以发现,要得到乘法结果的后三位,只需要用 ...
- LeetCode 2217. 找到指定长度的回文数
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 给你一个整数数组 qu ...
- 求最接近数n的2的次方数
我们当然可以直接暴力求解(负次方不考虑): int findTableSizeof2(const int target){if(target < 0) return 0;int power = ...
- python判断是否回文_对python判断是否回文数的实例详解
设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...
- LeetCode 31. Next Permutation-- Python 解法--数学题--比当前数大的最小的数
LeetCode 31. Next Permutation-- Python 解法–数学题–比当前数大的最小的数 此文首发于我的个人博客:LeetCode 31. Next Permutation-- ...
- Leetcode刷题第1题:两数之和(基于Java语言)
** Leetcode刷题第1题:两数之和(基于Java语言) ** 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 ...
- python【蓝桥杯vip练习题库】ADV-185五次方数(枚举)
试题 算法提高 五次方数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 对一个数十进制表示时的每一位数字乘五次方再求和,会得到一个数的五次方数 例如:1024的五次方数为1+0+3 ...
- if 求最小值、判断键盘录入的数是奇数还是偶数、输出2个数中的最大值
package day; import java.util.Scanner; public class Test_13 { public static void main(String[] args) ...
最新文章
- matlab编写的程序输入参数怎么写,用matlab编写一个用EM算法估计参数的程序
- 【高薪】阿联酋起源人工智能研究院诚邀优秀人才(博士)
- 别再被 Python 洗脑了!!
- 2019腾讯后台开发暑期实习面经汇总
- 模拟input type=file
- typical career path for consulting industry
- C#LeetCode刷题之#447-回旋镖的数量(Number of Boomerangs)
- 三星笔记本电脑怎么恢复出厂设置_Mac OS如何恢复出厂设置?安装Mac OS系统教程...
- java day63【 SSM 整合 】
- 恶略天气下的目标检测
- 幂函数c语言递归算法,使用递归的幂函数
- Nginx框架之Lua拓展
- 攻防世界CRYPTO新手区wp
- 极具发展潜力的20项油气勘探开发新技术
- 手机短信验证码的实现
- 如何安装 OneNote for Windows 10 的离线安装包
- js和jQuery获取浏览器窗口的高度、宽度的方法详解
- 《CMOS集成电路后端设计与实战》——导读
- Everything 高级搜索,后缀是png或者jpg的文件,使用
- 大国重器:人民币跨境支付系统CIPS
热门文章
- ftp无法连接虚拟机_一步步编写操作系统4 安装x86虚拟机 bochs
- PyCharm安装好vim后,怎么配置.vimrc
- C++ 异常变量的生命周期
- windows下 , py运用了 进程池, 将py打包成exe,出现错误的 解决思路之一
- ##连接符和#符的使用
- 计算机的网络体系以及参考模型
- html css 学习笔记(1)背景相关
- 106. 从中序与后序遍历序列构造二叉树
- 函数sigqueue
- Linux自有服务(2)-Linux从入门到精通第六天(非原创)