博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 342. Power of Four
阅读量:6194 次
发布时间:2019-06-21

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

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?

解法1,经典的数学解法:

class Solution(object):    def isPowerOfFour(self, num):        """        :type num: int        :rtype: bool        """        if num <= 0: return False        n = int(round(math.log(num, 4)))        return 4**n == num

解法2,迭代:

class Solution(object):    def isPowerOfFour(self, num):        """        :type num: int        :rtype: bool        """        if num <= 0: return False        while num >= 4:            if num % 4 != 0:                return False            num = num / 4            return num == 1

 解法3,最牛叉,

class Solution(object):    def isPowerOfFour(self, num):        """        :type num: int        :rtype: bool        """        return num > 0 and (num & (num - 1)) == 0 and (num - 1) % 3 == 0

 因为,4^n - 1 = C(n,1)*3 + C(n,2)*3^2 + C(n,3)*3^3 +.........+ C(n,n)*3^n

i.e (4^n - 1) = 3 * [ C(n,1) + C(n,2)*3 + C(n,3)*3^2 +.........+ C(n,n)*3^(n-1) ]
This implies that (4^n - 1) is multiple of 3.

类似解法:

return n & (n-1) == 0 and n & 0xAAAAAAAA == 0

或者是:

class Solution(object):    def isPowerOfFour(self, n):        """        :type num: int        :rtype: bool        """                 #1, 100, 10000, 1000000, 100000000, ....        #1, 100 | 10000 | 1000000 | 100000000, ... = 0101 0101 0101 0101 0101 0101 0101 0101        return n > 0 and n & (n-1) == 0 and (n & 0x55555555 != 0)

 因为n & n-1 == 0 就可以确定只有1个1, so 只要保证1的位置在1,3,5,7,。。。。这些位置上就行。

 

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

你可能感兴趣的文章
canvas下雨特效
查看>>
jquery的回调对象Callbacks详解
查看>>
7.06 生成累计和
查看>>
*Algs4-1.5.25随机网格的倍率测试-(未读懂题)
查看>>
高级位操作技巧
查看>>
Python总纲路线
查看>>
性能常用指标(重点)
查看>>
oracle--数据筛选
查看>>
Shiro - 限制并发人数登录与剔除
查看>>
Nyoj 吝啬的国度(图论&&双DFS)
查看>>
DAY18-Django之分页和中间件
查看>>
Log4Net使用指南 - sema - 博客园
查看>>
dict 没有 key 的情况
查看>>
CSS3多栏布局
查看>>
福大软工1816 · 团队现场编程实战(抽奖系统)
查看>>
002_python基础语录
查看>>
cocos2d-html5在cocos2d-x里面打包编译
查看>>
找不到或无法加载已注册的 .Net Framework Data Provider。
查看>>
Vue中注意target和currentTarget的使用
查看>>
如何在windows上调试安卓机谷歌浏览器上的页面
查看>>