首页 > 其他分享 >leetcode 342. Power of Four

leetcode 342. Power of Four

时间:2023-05-30 17:32:51浏览次数:47  
标签:return int 0101 Four num isPowerOfFour 342 leetcode 解法

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,。。。。这些位置上就行。

 

标签:return,int,0101,Four,num,isPowerOfFour,342,leetcode,解法
From: https://blog.51cto.com/u_11908275/6381025

相关文章

  • leetcode 345. Reverse Vowels of a String
    Writeafunctionthattakesastringasinputandreverseonlythevowelsofastring.Example1:Givens="hello",return"holle".Example2:Givens="leetcode",return"leotcede".Note:Thevowelsdoesnotincl......
  • leetcode Most Common Word——就是在考察自己实现split
    819.MostCommonWordGivenaparagraph andalistofbannedwords,returnthemostfrequentwordthatisnotinthelistofbannedwords. Itisguaranteedthereisatleastonewordthatisn'tbanned,andthattheanswerisunique.Wordsinthelist......
  • leetcode Kth Largest Element in a Stream——要熟悉heapq使用
    703.KthLargestElementinaStreamEasyDesignaclasstofind thekthlargestelementinastream.Notethatitisthekthlargestelementinthesortedorder,notthekthdistinctelement.Your KthLargest classwillhaveaconstructorwhichacceptsanin......
  • leetcode 2712. 使所有字符相等的最小成本
    2712.使所有字符相等的最小成本给你一个下标从 0 开始、长度为 n 的二进制字符串 s ,你可以对其执行两种操作:选中一个下标 i 并且反转从下标 0 到下标 i(包括下标 0 和下标 i )的所有字符,成本为 i+1 。选中一个下标 i 并且反转从下标 i 到下标 n-......
  • leetcode 2707. 字符串中的额外字符
    2707.字符串中的额外字符给你一个下标从 0 开始的字符串 s 和一个单词字典 dictionary 。你需要将 s 分割成若干个 互不重叠 的子字符串,每个子字符串都在 dictionary 中出现过。s 中可能会有一些 额外的字符 不在任何子字符串中。请你采取最优策略分割 s......
  • [LeetCode] 51. N-Queens
    The n-queens puzzleistheproblemofplacing n queensonan nxn chessboardsuchthatnotwoqueensattackeachother.Givenaninteger n,return alldistinctsolutionstothe n-queenspuzzle.Youmayreturntheanswerin anyorder.Eachsolution......
  • #yyds干货盘点# LeetCode程序员面试金典:填充每个节点的下一个右侧节点指针 II
    题目:给定一个二叉树:structNode{ intval; Node*left; Node*right; Node*next;}填充它的每个next指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将next指针设置为NULL。初始状态下,所有 next指针都被设置为NULL。 示例1:输入:root=[1,2,3......
  • 用自然语言让AI打leetcode周赛
    还在自己吭哧吭哧打算法平台Leetcode的周赛?为什么不试试神奇的ChatGPT类AI呢!用AI助手Claude参加第103场周赛,共四道题,均完成了AC,能达到参与者前10%的成绩。事情的起因是知乎上一位叫萧雅的用户尝试使用AI进行编程,但在测试过程中,她发现直接给出题目让AI进行编程并输出结果的方法,效......
  • LeetCode 530. 二叉搜索树的最小绝对差
    题目链接:LeetCode530.二叉搜索树的最小绝对差题意:给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。解题思路:递归法1既然是二叉搜索树,那么中序遍历一定是有序的,因此最小的插值一定出现在相邻的两个......
  • Fourier级数
    Fourier在研究热传导的问题时,用\(\dfrac{a_0}{2}+\sum\limits_{n=1}^{\infty}(a_n\cosnx+b_n\sinnx)\)的形式来表示一个周期为\(2\pi\)的函数\(f(x)\),取得了很成功的结果。于是他开始猜测任何以\(2\pi\)为周期的函数都可以用这种形式,这种三角函数的无穷求和的形式,来表示。这个......