iT邦幫忙

0

leetcode with python:231. Power of Two

  • 分享至 

  • xImage
  •  

題目:

Given an integer n, return true if it is a power of two. Otherwise, return false.

An integer n is a power of two, if there exists an integer x such that n == 2^x.

給定一數,判斷它是否是2的次方

這題有許多解法,我們先從最直觀的開始

class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        if n<=0: #0和負數不在討論範圍
            return False
            
        while n%2==0:
            n=n/2
        return n==1

將一數不斷除二直到不能整除
看最後結果是不是1,就知道該數是不是2的次方了
最後執行時間36ms(faster than 87.16%)

也有位元運算的解法

class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        count=0
        
        while n>0:
            count=count+(n&1)
            n=n>>1
        return count==1

我們可以發現2次方數在二進位表示時有共同的性質
1(1),10(2),100(4),1000(8),10000(16)......
那就是只有一位是1,其餘都是0
所以我用191.的方法,用&1和>>數出該數二進位表示有幾個1
若只有一個1,則該數是2的次方
最後執行時間27ms(faster than 98.57%)

不用迴圈的解法也是有的

import math
class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        if n<=0:
            return False
        return (math.log10(n)/math.log10(2))%1==0

import math讓我們可以用log函數
透過log的性質,我們可以知道log2(2的次方數)會是整數
且log10(n)/log10(2)=log2(n)
所以我們只要計算log10(n)/log10(2)再用%1判斷是不是整數即可
最後執行時間33ms(faster than 92.75%)

那我們下題見


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言