【一天一道LeetCode】#342. Power of Four
一天一道LeetCode
本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github
欢迎大家关注我的新浪微博,我的新浪微博
欢迎转载,转载请注明出处
(一)题目
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的n次方数。 
解题思路:可以参考:【一天一道LeetCode】#326. Power of Three和【一天一道LeetCode】#231. Power of Two 
首先,最简单的方法,采用循环来做:
class Solution {
public:
    bool isPowerOfFour(int num) {
        int n = num;
        while(n>0&&n%4==0)
        {
            n/=4;
        }
        return n==1;
    }
};
题目中有提问说能不能不用循环和递归来做,和判断3的n次方数一样,4的n次方数在整形数内只有16个,很快就能列举出来,也不失为一个好办法。 
另外观察4的n次方数和2的n次方数,可以看出,2的n次方数中能开方得到整数的均为4的n次方数。
class Solution {
public:
    //三个条件:大于0,是2的n次方数,开方后得到整数
    bool isPowerOfFour(int num) {
        return (num>0)&&!(num&(num-1))&&(sqrt(num)*sqrt(num)==num);
    }
};
在leetcode的讨论区看到这样一个答案,很巧妙。 
首先判断num是不是2的n次方数,在判断他与0xaaaaaaaa相与是否为0。 
4的n次方数有一个特点就是,在bit位上,第0,2,4,6,8,10….位上为1, 
所以,先判断是不是3的n次方数,就保证了有且仅有一位上为1的数,然后在剔除奇数位上为1的数,剩下的就是4的n次方数了。
class Solution {
public:
    bool isPowerOfFour(int num) {
        //三个条件:大于0,是2的n次方数,有且仅有偶数位上为1
        return (num>0)&&!(num&(num-1))&&!(num&0xaaaaaaaa);
    }
};
【一天一道LeetCode】#342. Power of Four的更多相关文章
- [LeetCode] 342. Power of Four 4的次方数
		
Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example:Giv ...
 - LeetCode 342. Power of Four (4的次方)
		
Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example:Giv ...
 - LeetCode 342. Power of Four
		
Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example:Giv ...
 - Leetcode 342 Power of Four 数论
		
题意:判断一个数是不是4的幂数,和Power of two类似. 先判断num是否大于0,再判断num是否能开根号,最后判断num开根号后的数是否是2^15的约数. 提示:4的幂数开根号就是2的幂数. ...
 - Python [Leetcode 342]Power of Four
		
题目描述: Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Examp ...
 - [LeetCode] 342. Power of Four(位操作)
		
传送门 Description Given an integer (signed 32 bits), write a function to check whether it is a power o ...
 - [LeetCode] 231 Power of Two && 326 Power of Three && 342 Power of Four
		
这三道题目都是一个意思,就是判断一个数是否为2/3/4的幂,这几道题里面有通用的方法,也有各自的方法,我会分别讨论讨论. 原题地址:231 Power of Two:https://leetcode. ...
 - 【一天一道LeetCode】#231. Power of Two
		
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
 - 【一天一道LeetCode】#326. Power of Three
		
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
 
随机推荐
- java 之 MyBatis(sql 可以执行,在eclipse执行报错问题)
			
前段时间写 mybatis Sql 查询语句的时候,发现一个很奇怪的现象,我写的SQL 语句在 pl/Sql 中明明可以执行,但是放到 eclipse 中执行却报错,因为时间比较久,依稀记得是文字与字 ...
 - 对中断的理解handle_level_irq【原创】
			
如下为本人原创,在解决问题的过程中的一点心得,如果有描述不准确的地方还请各位指出,非常感谢 Linux内核版本:linux-4.9.18 曾有一次调试触摸屏的时候遇到如下的问题 /startup/mo ...
 - 使用C# (.NET Core) 实现状态设计模式 (State Pattern)
			
本文的概念性内容来自深入浅出设计模式一书 项目需求 这是一个糖果机的需求图. 它有四种状态, 分别是图中的四个圆圈: No Quarter: 无硬币 Has Quater 有硬币 Gumball So ...
 - C语言程序设计第四次作业-选择结构
			
(一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"These sides do ...
 - 读书笔记-《Maven实战》-2018/4/16
			
第一章:Maven简介 1:Maven:Maven原本的单词意思为"知识的积累",谷歌翻译为"行家",而作为Apache的开源项目,Maven是一个主要服务于基 ...
 - 推荐几种PHP实现页面跳转的方法
			
1.PHP实现页面跳转第一种方法 <?php header("Location:http://www.baidu.com"); ?> header()是php内置函数, ...
 - Docker命令查询
			
基本语法 docker [OPTIONS] COMMAND [arg...] 一般来说,Docker 命令可以用来管理 daemon,或者通过 CLI 命令管理镜像和容器.可以通过 man docke ...
 - JavaScript 字符串(String)对象
			
String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". 一个字符串可以使用单引号或双引号: 实例 var ...
 - SQL Server 虚拟化(1)——虚拟化简介
			
本文属于SQL Server虚拟化系列 前言: 现代系统中,虚拟化越来越普遍,如果缺乏对虚拟化工作原理的理解,那么DBA在解决性能问题比如降低资源争用.提高备份还原速度等操作时就会出现盲点.所以基于本 ...
 - 永远不要在循环之外调用wait方法
			
1. 前言 随着摩尔定律的失效,Amdahl定律成为了多核计算机性能发展的指导.对于现在的java程序员们来说,并发编程越来越重要和习以为常.很惭愧和恐慌的是我对java的并发编程一直是只知道概念,入 ...