Power of Two 判斷2的次方數

2021-08-14 03:35:40 字數 1146 閱讀 3944

立馬想到遞迴,思路正確:

class solution 

};

忘了考慮n為0、1和負數的情況!!!

you are here!     時間可以

your runtime beats 21.76 % of cpp submissions.

完全自己寫的,簡單但是成就感,哈哈

別人的思路

這道題讓我們判斷乙個數是否為2的次方數,而且要求時間和空間複雜度都為常數,那麼對於這種玩數字的題,我們應該首先考慮位操作 bit operation。在leetcode中,位操作的題有很多,比如比如repeated dna sequences 求重複的dna序列,single number 單獨的數字,  single number ii 單獨的數字之二 ,grey code 格雷碼,reverse bits 翻轉位,bitwise and of numbers range 數字範圍位相與,number of 1 bits 位1的個數和 divide two integers 兩數相除等等。那麼我們來觀察下2的次方數的二進位制寫法的特點:

1     2       4         8         16   ....

1    10    100    1000    10000 ....

那麼我們很容易看出來2的次方數都只有乙個1,剩下的都是0,所以我們的解題思路就有了,我們只要每次判斷最低位是否為1,然後向右移位,最後統計1的個數即可判斷是否是2的次方數,**如下:

解法一:

class

solution

return cnt == 1

; }

};

這道題還有乙個技巧,如果乙個數是2的次方數的話,根據上面分析,那麼它的二進數必然是最高位為1,其它都為0,那麼如果此時我們減1的話,則最高位會降一位,其餘為0的位現在都為變為1,那麼我們把兩數相與,就會得到0,用這個性質也能來解題,而且只需一行**就可以搞定,如下所示:

解法二:

class

solution

};

第二天起來:

寫的是:

class solution 

};

這樣為什麼不行呢?輸入2就不對是因為二進位制的00不等於0??

判斷乙個正整數是2的n次

判斷乙個正整數是2的n次,假設不包括0。想了三種辦法。第一種 任意乙個數,如果是1,則為2的n次,如果大於1,則1 判斷該數是否為偶數,是則轉2,否則不是2的n次。2 判斷該數是否為2,是則為2的n次,否則對2做整除運算後轉1。在devc 上進行了實現,如下 include using namesp...

2的次冪表示

include includevoid fun int n int i,j,k,l int h 0 k n j 0 while k 0 l j 1 for h l h 0 h printf d a h printf n for i l i 0 i else continue if i 1 print...

2的次冪表示

問題描述 任何乙個正整數都可以用2進製表示,例如 137的2進製表示為10001001。將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表示式 137 2 7 2 3 2 0 現在約定冪次用括號來表示,即a b表示為a b 此時,137可表示為 2 7 2 3 2 0 進一步 ...