Power of Four
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
For Example:
|
|
Follow up:
Could you solve it without loops/recursion?
提示 | 解題應用 |
---|---|
BitManipulation | 二進位長度 |
Default:
|
|
解答思路:
先前曾經寫過類似的題目Power of Two,當然還有Power of Three,這次則是Power of Four,當然在想的時候會發現你在確認4的n次方同時,其值很可能也是2的n次方,畢竟4的n次方同時也是2的2n次方,所以倒不如直接用2的n次方尋找方式去篩選,而如果將值轉成二進位更可以發現到4的n次方二進位長度都為奇數,2的n次方則為偶數如下:
2 10 長度:2
4 100 長度:3
8 1000 長度:4
16 10000 長度:5
因此找出其為2次方的同時,再利用長度篩出是否為4次方即可達到目地。
程式碼解說:
如之前找2的n次方程式碼差不多,該值與該值-1做AND,而這次為了要確認是否為4的n次方,多了一個二進位的長度判斷,這邊用上了strconv的library,將其值轉為二進位字串,接著再開始判斷長度是否為奇數,若長度為奇數又是二的n次方,其值必為4的n次方回傳,其餘2的n次方不為4的n次方或連2的n次方都不是的狀況則回傳false
|
|
完整程式碼:
|
|
總結:
要確認某值是否為4的n次方,換句話說其值也是2的2n次方,所以倒不如直接用2的n次方尋找方式去篩選,而將值轉成二進位更可以發現到4的n次方二進位長度都為奇數,2的n次方則為偶數,因此再確認其為2的n次方值的同時,再利用長度篩出是否為4的n次方即可達到目地。