---
# System prepended metadata

title: \#231 Power of Two
tags: [leetcode, leetcode-easy]

---

# \#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`