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的次方数相关推荐

  1. [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( ...

  2. C语言每日一练——第79天:高次方数的尾数

    C语言每日一练 2022年1月27日 文章目录 题目描述 问题分析 代码实现 运行结果 题目描述 求13的13次方的最后三位数 问题分析 根据乘法竖式计算我们可以发现,要得到乘法结果的后三位,只需要用 ...

  3. LeetCode 2217. 找到指定长度的回文数

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   给你一个整数数组 qu ...

  4. 求最接近数n的2的次方数

    我们当然可以直接暴力求解(负次方不考虑): int findTableSizeof2(const int target){if(target < 0) return 0;int power = ...

  5. python判断是否回文_对python判断是否回文数的实例详解

    设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...

  6. LeetCode 31. Next Permutation-- Python 解法--数学题--比当前数大的最小的数

    LeetCode 31. Next Permutation-- Python 解法–数学题–比当前数大的最小的数 此文首发于我的个人博客:LeetCode 31. Next Permutation-- ...

  7. Leetcode刷题第1题:两数之和(基于Java语言)

    ** Leetcode刷题第1题:两数之和(基于Java语言) ** 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 ...

  8. python【蓝桥杯vip练习题库】ADV-185五次方数(枚举)

    试题 算法提高 五次方数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 对一个数十进制表示时的每一位数字乘五次方再求和,会得到一个数的五次方数 例如:1024的五次方数为1+0+3 ...

  9. if 求最小值、判断键盘录入的数是奇数还是偶数、输出2个数中的最大值

    package day; import java.util.Scanner; public class Test_13 { public static void main(String[] args) ...

最新文章

  1. matlab编写的程序输入参数怎么写,用matlab编写一个用EM算法估计参数的程序
  2. 【高薪】阿联酋起源人工智能研究院诚邀优秀人才(博士)
  3. 别再被 Python 洗脑了!!
  4. 2019腾讯后台开发暑期实习面经汇总
  5. 模拟input type=file
  6. typical career path for consulting industry
  7. C#LeetCode刷题之#447-回旋镖的数量(Number of Boomerangs)
  8. 三星笔记本电脑怎么恢复出厂设置_Mac OS如何恢复出厂设置?安装Mac OS系统教程...
  9. java day63【 SSM 整合 】
  10. 恶略天气下的目标检测
  11. 幂函数c语言递归算法,使用递归的幂函数
  12. Nginx框架之Lua拓展
  13. 攻防世界CRYPTO新手区wp
  14. 极具发展潜力的20项油气勘探开发新技术
  15. 手机短信验证码的实现
  16. 如何安装 OneNote for Windows 10 的离线安装包
  17. js和jQuery获取浏览器窗口的高度、宽度的方法详解
  18. 《CMOS集成电路后端设计与实战》——导读
  19. Everything 高级搜索,后缀是png或者jpg的文件,使用
  20. 大国重器:人民币跨境支付系统CIPS

热门文章

  1. ftp无法连接虚拟机_一步步编写操作系统4 安装x86虚拟机 bochs
  2. PyCharm安装好vim后,怎么配置.vimrc
  3. C++ 异常变量的生命周期
  4. windows下 , py运用了 进程池, 将py打包成exe,出现错误的 解决思路之一
  5. ##连接符和#符的使用
  6. 计算机的网络体系以及参考模型
  7. html css 学习笔记(1)背景相关
  8. 106. 从中序与后序遍历序列构造二叉树
  9. 函数sigqueue
  10. Linux自有服务(2)-Linux从入门到精通第六天(非原创)