leetCode 342. Power of Four 位运算

简介:

342. Power of Four


Given an integer (signed 32 bits), write a function to check whether it is a power of 4.

Example:
Given num = 16, return true. Given num = 5, return false.

Follow up: Could you solve it without loops/recursion?

题目大意:

判断一个数是否为4的幂。

思路:

要求不能使用循环和递归。所以必须使用位运算了。

因为4的幂肯定是2的幂,所以先将2的幂筛选一次,然后再筛选4的幂。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class  Solution {
public :
     bool  isPowerOfFour( int  num) {
         if (num <= 0 )
             return  false ;
         if ( ( (num)&(num-1) ) ) //判断是否为2的幂
             return  false ;
             //0x55555555的二进制表示为
             //01010101010101010101010101010101
             //将目标数过滤出来
         if ( ( (num) & (0x55555555) ) == num)
             return  true ;
         return  false ;
     }
};


位运算中对于寻找合适的 0x55555555 比较费劲。多加练习。

参考自:http://blog.csdn.net/liyuanbhu/article/details/51178795



本文转自313119992 51CTO博客,原文链接:http://blog.51cto.com/qiaopeng688/1837900

相关文章
|
3月前
|
存储 算法 程序员
【Leetcode 程序员面试金典 01.01】判定字符是否唯一 —— 位运算|哈希表
可以使用哈希表或位运算来解决此问题:由题可知s[i]仅包含小写字母,int[26]即能表示字符的出现次数;
|
3月前
|
Java 程序员
【Leetcode 程序员面试金典 05.01】插入 —— 位运算
位运算问题,只需要把 N 的 i 到 j 位都置 0 后再和 M 左移 i 位的结果进行按位或即可
|
8月前
|
算法 C语言 C++
【位运算问题】Leetcode 136、137、260问题详解及代码实现
此外,任意一个数异或0都为他本身 (这从二进制编码来理解也很好理解,0的二进制编码全为0,任意一个数与其异或不同的就是若干位的1)
52 0
|
算法
leetcode-每日一题1217. 玩筹码(贪心+位运算)
判断元素的奇偶性,把奇数下标记录在odd 元素里
57 0
leetcode-每日一题1217. 玩筹码(贪心+位运算)
|
缓存 Java 程序员
LeetCode 342. Power of Four
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
55 0
LeetCode 342. Power of Four
|
算法 C++ Python
经典位运算算法模板-附LeetCode剑指 Offer 56 - I. 数组中数字出现的次数-题解-python && C++源代码
经典位运算算法模板-附LeetCode剑指 Offer 56 - I. 数组中数字出现的次数-题解-python && C++源代码
|
C++ Python
LeetCode每日一题题解:693. 交替位二进制数-题解-python && C++源代码-经典位运算
LeetCode每日一题题解:693. 交替位二进制数-题解-python && C++源代码-经典位运算
|
机器学习/深度学习 算法
《LeetCode》位运算详解
《LeetCode》位运算详解
《LeetCode》位运算详解
|
机器学习/深度学习 存储
【LeetCode剑指offer65】不用加减乘除做加法(位运算)
(a & b) << 1能够计算a和b的所有进位值; a ^ b则是计算a和b的各位相加(不管进位值)
97 0
【LeetCode剑指offer65】不用加减乘除做加法(位运算)