LeetCode 第 342 题(Power of Four)
2024-10-21 11:30:02
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;
}
最新文章
- React(JSX语法)----动态UI
- wince中测试驱动应用程序的实现
- Preconditions优雅的检验参数
- 《python核心编程》读书笔记--第16章 网络编程
- sql2008+vs2008安装心得以及详细教程分享
- Android Density(密度)
- 怎样在delphi中实现控件的拖拽
- 对JavaScript中this的理解
- window7 32位安装Oracle11g
- Javascript 基础知识2017-03-17
- Github上的Android项目介绍之ListViewAnimation(针对listView item的侧滑菜单)(1)
- [转]Blue Prism Interview Questions and Answers
- 为什么要写 tf.Graph().as_default()
- 寒假特训——搜索——H - Nephren gives a riddle
- Python2.7-内置类型
- c语言实现xor加密
- Openwrt之移动硬盘ext3/ext4格式化工具
- 编写高质量代码--改善python程序的建议(一)
- Rhel6.0部署Oracle10g报错相关问题记录
- Java客户端Jedis
热门文章
- 纯HTML+CSS写出一颗会飘动的树,有没有惊艳到你呢?
- 51nod 1090 3个数和为0【二分】
- 浅谈JavaScript中的null和undefined
- MathType requires a newer version of MT Extra等MathType问题的不兼容性解决方案
- BeanUtils——JavaBean相互转换及字典翻译
- espresso 元素遮挡问题。
- [置顶]
 kubernetes资源对象--Label
- 无法通过windows installer服务安装此安装程序包。您必须安装带有更新版本windows Installer服务的Windows
- 删除windows服务命令
- tomcat修改默认访问首页