leetcode 231 python 2的幂

2019-01-31  本文已影响0人  慧鑫coming

传送门

题目要求

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。

示例 1:
输入: 1
输出: true
解释: 20 = 1

示例 2:
输入: 16
输出: true
解释: 24 = 16

示例 3:
输入: 218
输出: false

思路一

n小于1,肯定不会是2的幂;当n大于1时,如果出现了n%2 != 0 这种情况,说明n也不是2的幂,所以可以对n做循环取余操作,能坚持下来,它就是2的幂

→_→ talk is cheap, show me the code

class Solution:
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n < 1:
            return False
        while n > 1:
            if n % 2 != 0:
                return False
            n = n // 2
        return True

思路二

1的二进制0001, 2的二进制0010, 4的二进制0100, 8的二进制1000,发现了什么,对,2的幂的二进制表示有且只有一个 1,当它们减少1时,会怎样?原来1的位置变为0,原来1后面的0都变成1,有搞头没?

→_→ talk is cheap, show me the code

class Solution:
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n < 1:
            return False
        return n & n-1 == 0
上一篇下一篇

猜你喜欢

热点阅读