1 题目描述

2 解题思路

2.1 方法1 判断log函数的结果是不是整数


class Solution:def isPowerOfFour(self, n: int) -> bool:if(n<=0):return Falsetmp=math.log(n,4)return(tmp==int(tmp))

2.2 方法2 不断除4

只要能被4整除,就不断除4,直到不能除为止,判断是否为1

class Solution:def isPowerOfFour(self, n: int) -> bool:if(n<=0):return Falsewhile(n%4==0):n=n//4return(n==1)

2.3  位运算

如果 n 是 4 的幂,那么 n 一定也是 2 的幂。

因此我们可以首先判断 n 是否是 2 的幂,在此基础上再判断 n 是否是 4 的幂。

判断 n 是否是 2 的幂可以参考文巾解题 231. 2的幂_刘文巾的博客-CSDN博客

如果 n 是 4 的幂,那么 n 的二进制表示中有且仅有一个 1,并且这个 1 出现在从低位开始的第偶数个二进制位上(这个 1 后面必须有偶数个 0)。这里我们规定最低位为第 0 位,例如 n=16 时,n 的二进制表示为(10000)。唯一的 1 出现在第 4 个二进制位上,因此 n 是 4 的幂。

由于题目保证了 n 是一个 32 位的有符号整数,因此我们可以构造一个整数 mask,它的所有偶数二进制位都是 1,所有奇数二进制位都是 0。这样一来,我们将 n 和mask 进行按位与运算,如果结果为 n,说明 n 二进制表示中的 1出现在偶数的位置,此时n是4的幂;否则说明其出现在奇数的位置。

根据上面的思路,mask 的二进制表示为0b1010101010101010101010101010101

class Solution:def isPowerOfFour(self, n: int) -> bool:if(n<=0):return Falseif(n&(n-1)!=0):return False#如果都不是2的幂,那么更不是4的幂mask=0b1010101010101010101010101010101if(n& mask==n):return Trueelse:return False

2.4  mod 3

如果 n 是 4 的幂,那么它可以表示成 的形式,我们可以发现它除以 3 的余数一定为 1,即:

如果n是2的幂,但不是4的幂,那么它可以表示成 的形式,此时它除以 3 的余数一定为 2。

class Solution:def isPowerOfFour(self, n: int) -> bool:if(n<=0):return Falseif(n&(n-1)!=0):return False#如果都不是2的幂,那么更不是4的幂if(n%3==1):return Truereturn False

文巾解题 342. 4的幂相关推荐

  1. 文巾解题 326. 3的幂

    1 题目描述 2 解题思路 2.1 循环递归 class Solution:def isPowerOfThree(self, n: int) -> bool:if(n<=0):return ...

  2. 文巾解题 231. 2的幂

    1 题目描述 2 解题思路 2.1 方法1 判断是不是整数 class Solution:def isPowerOfTwo(self, n: int) -> bool:if(n<=0):r ...

  3. 文巾解题 477. 汉明距离总和

    1 题目描述 2 解题思路 2.1 暴力两两比较 两个数字之间的汉明距离可以使用 文巾解题 461. 汉明距离_刘文巾的博客-CSDN博客 中的任何一种方法,但是因为这个是两两比较,时间复杂度比较高, ...

  4. 文巾解题 面试题 01.04. 回文排列

    1 题目描述 2 解题思路 2.1 哈希表 创建一个哈希表,记录每个元素出现的次数.如果出现次数为奇数的元素只有一个或者没有,那么就是一个回文排列 class Solution:def canPerm ...

  5. 文巾解题 15. 三数之和

    1 题目描述 2 解题思路 2.1 使用两数之和函数 这种做法目前超时了,如果大家有想到合适的减时间/剪枝的方法,欢迎私信or评论~ 两数之和的方法见文巾解题 1. 两数之和_刘文巾的博客-CSDN博 ...

  6. 文巾解题 1035. 不相交的线

    1 题目描述 2 解题思路 k条互不相交的直线分别连接了数组 nums1和nums2的 k 对相等的元素,而且这 k 对相等的元素在两个数组中的相对顺序是一致的,因此,这 k 对相等的元素组成的序列即 ...

  7. 文巾解题 278. 第一个错误的版本

    1 题目描述 2 解题思路 二分查找见:二分查找详解_刘文巾的博客-CSDN博客 class Solution(object):def firstBadVersion(self, n):left=1r ...

  8. 文巾解题 704. 二分查找

    1 题目描述 2 解题思路 二分查找见: 二分查找详解_刘文巾的博客-CSDN博客 class Solution(object):def search(self, nums, target):left ...

  9. 文巾解题 627. 变更性别

    1 题目描述 2 解题思路 回顾一下 UPDATE语句 2.1 CASE语句 回顾一下CASE语句(见数据库笔记: SQL_刘文巾的博客-CSDN博客 第六节) UPDATE salary SET s ...

最新文章

  1. HDU 4405 概率期望DP
  2. 深度学习中的batch理解(batch size 一次喂给神经网络的数据大小量)
  3. IEnumerableT和IQueryableT区分
  4. W10的服务器正在运行,win10开机提示服务器正在运行中的解决教程
  5. java 判断字符串是否为数字
  6. VC2008 Windows Media Player控件的使用技巧
  7. 多终端同时登录_So easy!同时登陆两个或多个Mac版微信和QQ
  8. Spark Conf配置用法
  9. matlab的imnoise
  10. 自定义微信小程序TabBar
  11. 年薪50万的程序员_程序员年薪50万 ! 工资是不是太高了?
  12. 第十六周助教心得体会
  13. STM32---FLASH闪存
  14. springMVC实现json 返回到页面
  15. 桌面快捷方式小箭头隐藏与还原(亲测有效)
  16. ubuntu20 从wine安装到微信3的使用(解决微信乱码、无法输入)
  17. 【基本办公软件】万彩办公大师教程丨高级计算器的应用
  18. 【NOI2011】bzoj2434 阿狸的打字机
  19. 英特尔微软强强联手开发智能广告技术
  20. 漫谈云数据中心的前世今生

热门文章

  1. CSS成长之路----知识点篇
  2. Linux中设置定期备份oracle数据库
  3. 打开.264后缀名格式的文件
  4. 查询前几条记录SQL在不同数据库中的用法
  5. 各种协议中的协议类型对应的值
  6. 算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数
  7. Linux 内核定时器使用 二 高精度定时器 hrtimer 的用例
  8. 模拟命令行自动输入的HTML,HTML5 命令行界面仿真和自动打字动画
  9. 易语言开发c s,Grid++Report报表工具C/S实战项目演练
  10. python中multiindex如何索引_python – MultiIndex DataFrames的Pandas HDFStore:如何有效地获取所有索引...