博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 第 342 题(Power of Four)
阅读量:7013 次
发布时间:2019-06-28

本文共 1479 字,大约阅读时间需要 4 分钟。

LeetCode 第 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?

题目非常easy, 推断一个数是否是 4 的 N 次方。

难点在于后面的附加条件:不能用循环和递归。

首先先给个用递归的解法。

bool isPowerOfFour(int num){    if(num == 1) return true;    if(num <= 0) return false;    if(num & 0x03) return false;    return isPowerOfFour(num / 4);}

然后再给一个用循环的解法:

bool isPowerOfFour(int num){    if(num < 0) return false;    do    {        if(num == 1) return true;        if(num & 3) return false;        num = num >> 2;    }while (num);    return false;}

假设不用循环和递归。也是能够做的。比方穷举全部 4 的 N 次方。

尽管这个代码看起来非常丑陋,可是确实也满足题目的要求。

bool isPowerOfFour(int num){    switch(num)    {    case 0x01:    case 0x04:    case 0x10:    case 0x40:    case 0x100:    case 0x400:    case 0x1000:    case 0x4000:    case 0x10000:    case 0x40000:    case 0x100000:    case 0x400000:    case 0x1000000:    case 0x4000000:    case 0x10000000:    case 0x40000000:        return true;    default:        return false;    }}

讲了这么多,该说说正题了。这个题目事实上考察的是这么一个小知识点。 一个数 num。假设是 2 的 N 次方,那么有:

num & (num - 1) = 0

一个数 num 假设是 4 的 N 次方必定也是 2 的 N 次方。所以能够先推断 num 是否是 2 的 N 次方。然后再将 2 的 N 次方中那些不是 4 的 N 次方的数去掉。因此就有了以下的代码。

bool isPowerOfFour(int num){    if(num <= 0) return false;    if(num & (num - 1)) return false; // 先推断是否是 2 的 N 次方    if(num & 0x55555555) return true; // 再将不是 4 的 N 次方的数字去掉    return false;}

转载地址:http://ruqtl.baihongyu.com/

你可能感兴趣的文章
哈希表的静态,动态,以及key/value形式
查看>>
centos7在命令行下安装图形界面
查看>>
lc257. Binary Tree Paths
查看>>
iPhone更新失败后如何恢复数据
查看>>
rpm命令如何打印调试信息?
查看>>
以前的随笔已移至日记
查看>>
android 使用style修饰内容
查看>>
Mac入门教程之: Command键5个隐藏功能
查看>>
OpenCV中的神器Image Watch
查看>>
Java 多线程学习笔记
查看>>
CDMA.ANYDATA 短信接收注意事项(针对乱码问题)
查看>>
c语言 函数可变参数列表
查看>>
UML概述
查看>>
ListView优化-getView优化
查看>>
Firefox 按一下Alt键 出现菜单!
查看>>
zepto中的属性设置
查看>>
oracle复习
查看>>
浅谈软件系统的标准化和产品化
查看>>
C++中sizeof操作符与strlen函数
查看>>
中文名文件上传到linux服务器上以后文件名会乱码(openoffice)
查看>>