【LeetCode 簡單題】61-2的冪
阿新 • • 發佈:2018-11-04
宣告:
今天是第61道題。給定一個整數,編寫一個函式來判斷它是否是 2 的冪次方。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除
(手動比心ღ( ´・ᴗ・` ))
正文
題目:給定一個整數,編寫一個函式來判斷它是否是 2 的冪次方。
示例 1:
輸入: 1 輸出: true 解釋: 20 = 1示例 2:
輸入: 16 輸出: true 解釋: 24 = 16示例 3:
輸入: 218 輸出: false
解法1。利用觀察得出規律,如果n是2的若干次冪,那麼n的2進製表示肯定是高位1其他全0,n和n-1的與肯定是全0。
執行用時: 28 ms, 在Power of Two的Python提交中擊敗了99.84% 的使用者
class Solution(object): def isPowerOfTwo(self, n): """ :type n: int :rtype: bool """ if n == 0: return False if n == 1: return True res = n&(n-1) # 如果n是2的若干次冪,n的二進位制表示最高位為1其他全0,和n-1相與的話一定是全0 if res == 0: return True else: return False
解法2。n除以2,遍歷條件是n是2的倍數以及n>1,那麼除到最後如果n是2的冪,那麼肯定為1。
執行用時: 36 ms, 在Power of Two的Python提交中擊敗了39.53% 的使用者
class Solution(object): def isPowerOfTwo(self, n): """ :type n: int :rtype: bool """ while n%2 ==0 and n>1: n /= 2 return n=1
解法3。等比增加2的倍數和n相比較,如果恰好找到,返回True,若n更大,則等比增加,若n更小,那麼返回False。
執行用時: 36 ms, 在Power of Two的Python提交中擊敗了39.53% 的使用者
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
for i in range(32):
if n == pow(2,i):
return True
if n > pow(2,i):
continue
else:
return False
return False
結尾
解法1:https://blog.csdn.net/ymmbjcz/article/details/78645896
解法2&解法3:LeetCode