【LeetCode231】2的幂(n & (n - 1) == 0或n & (-n) == n)

简介: 要是2的幂,可以回想二进制数中,什么样的二进制数对应的十进制是2的幂呢,就是在二进制数中,只有一个1,其余都是0。所以我们只需要判断给定的数的二进制数,如果只有一个1则返回true了。

一、题目

image.pngimage.png



二、思路

要是2的幂,可以回想二进制数中,什么样的二进制数对应的十进制是2的幂呢,就是在二进制数中,只有一个1,其余都是0。所以我们只需要判断给定的数的二进制数,如果只有一个1则返回true了。


位运算的技巧:


image.png

image.png

然后n & (-n)运算后,结果的高位全部为0,最低位的1和后面的0都没有变化,因此我们可以用n > 0 && (n & -n) == n判断这题。

三、代码

class Solution {
public:
    bool isPowerOfTwo(int n) {
        //return n > 0 && (n & (n - 1)) == 0;  //法二
        return n > 0 && (n & -n) == n;
    }
};


相关文章
|
算法
三元运算符 return mData == null ? 0 : mData.size();的含义
三元运算符 return mData == null ? 0 : mData.size();的含义
59 0
|
6月前
! [ ] == ! [ ] 和 ! [ ] == [ ] 结果是什么? 为什么?
! [ ] == ! [ ] 和 ! [ ] == [ ] 结果是什么? 为什么?
41 0
|
算法 C语言
我去,脸皮厚啊,你竟然使用==比较浮点数?
老读者都知道了,我在九朝古都洛阳的一家小作坊式的公司工作,身兼数职,谈业务、敲代码的同时带两个新人,其中一个就是大家熟知的小王,经常犯错,被我写到文章里。 不过,小王的心态一直很不错,他不觉得被我批评有什么丢人的,反而每次读完我的文章后觉得自己又升级了。因此,我觉得小王大有前途,再这么干个一两年,老板要是觉得我的性价比低了,没准就把我辞退留下小王了。一想到这,我竟然枯燥一笑了。
经典面试题a == 1 && a== 2 && a== 3
经典面试题a == 1 && a== 2 && a== 3
69 0
LeetCode 343. Integer Break
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。
76 0
LeetCode 343. Integer Break
|
测试技术
LeetCode 204. Count Primes
统计所有小于非负整数 n 的质数的数量。
49 0
LeetCode 204. Count Primes