一、題目
二、解題方法
1、方法一
2、方法二
3、方法三
一、題目
實現乙個方法,判斷乙個正數是否是2的整數次冪。(如:8是2的3次冪,返回true,9不是,返回false)要求效能盡可能地高。
二、解題方法
1、方法一
暴力解法:設定乙個中間量temp=1,每次乘以2後和原資料比較,如果等於則返回true,否則繼續乘2。直到大於原資料,返回false。
時間複雜度為o(logn)
**實現:
def
is_power_of_2
(num)
: temp=
1while temp<=num:
if temp==num:
return
true
else
: temp *=
2return
false
print
(is_power_of_2(8)
)print
(is_power_of_2(9)
)
2、方法二
與方法一相同,只是把temp*2變成了temp向左移1位。(移位運算效率比較高)
這種方法其實並沒有實質性的提高效率,時間複雜度仍然為o(logn)
**實現:
def
is_power_of_2
(num)
: temp=
1while temp<=num:
if temp==num:
return
true
else
: temp=temp <<
1return
false
print
(is_power_of_2(8)
)print
(is_power_of_2(9)
)
3、方法三
我們可以把資料轉化為二進位制數來找尋特徵:
不管是2的任何次冪,其二進位制形式都是1******,只有最高為位為1,其他位全為0
在此基礎上,把原資料減1,就變成了111111的形式,二進位制數字全變成了1。
這個時候,我們讓n&(n-1),其結果必然為0。
所以。判斷乙個數是否是2的整數次冪,就看是否滿足:n&(n-1)==0,滿足即是2的整數次冪,反之則不是。
該方法的時間複雜度為o(1) 。
**實現:
def
is_power_of_2
(num)
:return num&
(num-1)
==0print
(is_power_of_2(8)
)print
(is_power_of_2(9)
)
python 是否是乙個整數
問題描述 輸入乙個字串,判別它是否符合整數的寫法。正整數的寫法是 用數字開頭,其後可以跟數字。負整數的寫法是 用負號開頭,其後跟數字。輸入的字串的頭尾可能包含空格。輸入形式 一行。乙個字串。輸出形式 yes或者no。如果符合整數寫法,輸出yes,否者輸出no。樣例輸入 897 樣例輸出 yes 樣例...
判斷乙個整數是否為素數 確定乙個整數是否是2的冪
給定乙個整數,編寫乙個函式來確定它是否是2的冪。範圍 1 2 31 1 測試用例 輸入 16,輸出 true 因為 2 4 16 輸入 18,輸出 false.最明顯的暴力方法就是除以2,然後檢查它是否達到1。var poweroftwo function n 由於給出的範圍在0 2 31 1之間,...
如何判斷乙個非負整數是否是2的冪
如何判斷乙個數是2的冪,主要是要找出2的冪次方的數的特點。我們知道,1個數乘以2就是將該數左移1位,而2的0次冪為1,所以2的n次冪 就是2的0次冪n次乘以2 就是將1左移n位,這樣我們知道如果乙個數n是2的冪,則其只有首位為1,其後若干個0,必然有n n 1 為0。在求1個數的二進位制表示中1的個...