# \#231 Power of Two ## *確認是否為2的n次方* ## Log - build 20210508 by syhuang ## 技巧解 - 運用2^n在2進位時是最左邊1剩下皆0, 因此可以得到2^n和2^n-1做bit AND結果一定是false(如果不是2^n就一定是true) ```javascript= var isPowerOfTwo = function(n) { if(n<=0) return false; if(n==1) return true; return !(n & (n-1)); }; ``` ## 初見2 - 一般解法, 迴圈除以2直到餘數=1為止, 最後數字是1就表示n=pow(2,x) - 注意edge case n=0,1 ```javascript= var isPowerOfTwo = function(n) { if(n==0) return false; if(n==1 || n==2) return true; while(n%2==0){ if(n/2 !== parseInt(n/2)) break; n /= 2; } if(n==1) return true; else return false; }; ``` ## 初見 - 遞迴解法, 但數字太大時會出現Maximum call stack size exceeded error錯誤 ```javascript= var isPowerOfTwo = function(n) { if(n==1 || n==2) return true; if(n!=parseInt(n)) return false; return (n%2==0) && isPowerOfTwo(n/2); }; ``` ## 備註 - javascript call function有一定的限制, 呼叫太多的話會出現`Maximum call stack size exceeded error`, 通常遞迴易有這種情況, 要注意使用遞迴時呼叫的次數 ## 參考 ###### tags: `leetcode`, `leetcode-easy`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up