leetcode 腾讯精选练习(50 题)231.2的幂

原题目

Given an integer, write a function to determine if it is a power of two.

Example 1:

Input: 1
Output: true 
Explanation: 20 = 1

Example 2:

Input: 16
Output: true
Explanation: 24 = 16

Example 3:

Input: 218
Output: false
思路

预处理方法,将 2 的 0 次方到 2 的 100 次方的数全部列出,遍历所有的数,当 n 小于列表中的数时继续遍历,当 n 等于列表中的数时返回 True,当 n 大于列表中的数时返回 False。

第一遍解法
# Runtime: 68 ms, faster than 5.78% of Python3
# Memory Usage: 13.3 MB, less than 31.52% of Python3
class Solution:
    def isPowerOfTwo(self, n):
        l = []
        for i in range(101):
            l.append(2**i)
        for val in l:
            if val == n:
                return True
            elif val < n:
                continue
            else:
                return False
网上好的解法

2 的幂次一定是最前面一个 1,后面都是 0(比如 2——10,4——100,8——1000,16——10000),n-1 后成了第一位是 0,后面全是 1(1——01,3——011,7——0111,15——01111),进行 & 运算后结果是0

class Solution(object):
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        return n > 0 and not (n & n-1)
自己可以改进的地方

最简代码

获得的思考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值