Power of Three
Given an integer, write a function to determine if it is a power of three.
Follow up:
Could you do it without using any loop / recursion?
提示 | 解題應用 |
---|---|
Math | 腦力激盪 |
Default:
|
|
解答思路:
先前曾經寫過類似的題目Power of Two,不過這邊看半天對於3的n次方數位元實在沒有什麼特別之處,follow up又希望你一樣能不用任何的迴圈及遞回,想了辦天也沒什麼辦法,只好去看其它人的討論,與其說是解題,倒不如說是腦力激盪,如果兩個同樣都是3的n次方數,比較大的那個去向比較小的取餘數必為0,就是運用這樣的概念,找一個3的n次方在32位元內極大值,可以發現是3的19次方1162261467,題目會帶入的值鐵定小於等於其極大值,透過這樣的小訣竅最後就可以很快速的找出解。
程式碼解說:
非常單純的短短幾行,首先判斷n是否大於等於0,接著用算好的3次方在32位元內的極大值(1162261467)對n取餘數,若為0表示同為3的n次方回傳true,其它的狀況則回傳false
|
|
完整程式碼:
|
|
總結:
相較於2的n次方是用位元的方法來判斷,3的n次方甚至是其它數的次方則可以用整除的方法來判斷,不過前提是要先知道取得帶入值型別是幾位元,且算出對應位元該相同數次方的極大值,最後用極大值對其帶入的數取餘數,若為0表示同為該數的n次方,此方法相對麻煩在於需事先算出極大值。