求2的幂
給定一個(gè)整數(shù),編寫(xiě)一個(gè)函數(shù)來(lái)判斷它是否是 2 的冪次方。
示例 1:
輸入: 1
輸出: true
解釋: 20 = 1
示例 2:
輸入: 16
輸出: true
解釋: 24 = 16
示例 3:
輸入: 218
輸出: false
解法一 導(dǎo)包
import math def func(n):if n<1:return Falseif math.log2(n) == math.ceil(math.log2(n)): //如果計(jì)算得到的log2(n)是正整數(shù),則它是2的冪, ceil()返回最小整數(shù)return Trueelse:return False解法二 二進(jìn)制判斷
def func(n):if n > 0:if bin(n).count('1') == 1: //二進(jìn)制數(shù)中如果第一位是1,其余為是0,則這個(gè)數(shù)是2的冪return Trueelse:return Falseelse:return False解法三
def func(n):while n>1: n = n/2.0 //除以2.0能避免整數(shù)四舍五入出錯(cuò)print(n)if n == 1: //如果n能被2除盡得1則為2的冪return Trueelse:return False時(shí)間復(fù)雜度而言,解法一和解法三都是O(1), 解法三是右移運(yùn)算,解法一是CPU直接計(jì)算對(duì)數(shù),為O(1).
解法二需要遍歷數(shù)組,復(fù)雜度為O(n).
總結(jié)
- 上一篇: vs2013 qt5.6.3安装
- 下一篇: java excel公式计算_java中