文巾解题 342. 4的幂
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的幂相关推荐
- 文巾解题 326. 3的幂
1 题目描述 2 解题思路 2.1 循环递归 class Solution:def isPowerOfThree(self, n: int) -> bool:if(n<=0):return ...
- 文巾解题 231. 2的幂
1 题目描述 2 解题思路 2.1 方法1 判断是不是整数 class Solution:def isPowerOfTwo(self, n: int) -> bool:if(n<=0):r ...
- 文巾解题 477. 汉明距离总和
1 题目描述 2 解题思路 2.1 暴力两两比较 两个数字之间的汉明距离可以使用 文巾解题 461. 汉明距离_刘文巾的博客-CSDN博客 中的任何一种方法,但是因为这个是两两比较,时间复杂度比较高, ...
- 文巾解题 面试题 01.04. 回文排列
1 题目描述 2 解题思路 2.1 哈希表 创建一个哈希表,记录每个元素出现的次数.如果出现次数为奇数的元素只有一个或者没有,那么就是一个回文排列 class Solution:def canPerm ...
- 文巾解题 15. 三数之和
1 题目描述 2 解题思路 2.1 使用两数之和函数 这种做法目前超时了,如果大家有想到合适的减时间/剪枝的方法,欢迎私信or评论~ 两数之和的方法见文巾解题 1. 两数之和_刘文巾的博客-CSDN博 ...
- 文巾解题 1035. 不相交的线
1 题目描述 2 解题思路 k条互不相交的直线分别连接了数组 nums1和nums2的 k 对相等的元素,而且这 k 对相等的元素在两个数组中的相对顺序是一致的,因此,这 k 对相等的元素组成的序列即 ...
- 文巾解题 278. 第一个错误的版本
1 题目描述 2 解题思路 二分查找见:二分查找详解_刘文巾的博客-CSDN博客 class Solution(object):def firstBadVersion(self, n):left=1r ...
- 文巾解题 704. 二分查找
1 题目描述 2 解题思路 二分查找见: 二分查找详解_刘文巾的博客-CSDN博客 class Solution(object):def search(self, nums, target):left ...
- 文巾解题 627. 变更性别
1 题目描述 2 解题思路 回顾一下 UPDATE语句 2.1 CASE语句 回顾一下CASE语句(见数据库笔记: SQL_刘文巾的博客-CSDN博客 第六节) UPDATE salary SET s ...
最新文章
- HDU 4405 概率期望DP
- 深度学习中的batch理解(batch size 一次喂给神经网络的数据大小量)
- IEnumerableT和IQueryableT区分
- W10的服务器正在运行,win10开机提示服务器正在运行中的解决教程
- java 判断字符串是否为数字
- VC2008 Windows Media Player控件的使用技巧
- 多终端同时登录_So easy!同时登陆两个或多个Mac版微信和QQ
- Spark Conf配置用法
- matlab的imnoise
- 自定义微信小程序TabBar
- 年薪50万的程序员_程序员年薪50万 ! 工资是不是太高了?
- 第十六周助教心得体会
- STM32---FLASH闪存
- springMVC实现json 返回到页面
- 桌面快捷方式小箭头隐藏与还原(亲测有效)
- ubuntu20 从wine安装到微信3的使用(解决微信乱码、无法输入)
- 【基本办公软件】万彩办公大师教程丨高级计算器的应用
- 【NOI2011】bzoj2434 阿狸的打字机
- 英特尔微软强强联手开发智能广告技术
- 漫谈云数据中心的前世今生
热门文章
- CSS成长之路----知识点篇
- Linux中设置定期备份oracle数据库
- 打开.264后缀名格式的文件
- 查询前几条记录SQL在不同数据库中的用法
- 各种协议中的协议类型对应的值
- 算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数
- Linux 内核定时器使用 二 高精度定时器 hrtimer 的用例
- 模拟命令行自动输入的HTML,HTML5 命令行界面仿真和自动打字动画
- 易语言开发c s,Grid++Report报表工具C/S实战项目演练
- python中multiindex如何索引_python – MultiIndex DataFrames的Pandas HDFStore:如何有效地获取所有索引...