231. Power of Two

231. Power of Two

一、題目

Given an integer n, return true if it is a power of two. Otherwise, return false.

An integer n is a power of two, if there exists an integer x such that n == 2x.

 

Example 1:

Input: n = 1 Output: true Explanation: 20 = 1

Example 2:

Input: n = 16 Output: true Explanation: 24 = 16

Example 3:

Input: n = 3 Output: false

 

Constraints:

  • -231 <= n <= 231 - 1

 

Follow up: Could you solve it without loops/recursion?

 

二、程式作法

 /*
 解法三 - 取 Log2
 */
public class Solution
{
    public bool IsPowerOfTwo(int n)
    {
        return Math.Log2(n) % 1 == 0 ? true : false;
    }
}

/*
 解法一 while loop 取 MOD
 */
/*
public class Solution
{
    public bool IsPowerOfTwo(int n)
    {
        if (n < 1)
            return false;
        if (n == 1)
            return true;

        while (n % 2 != 1 && n != 0)
            n /= 2;

        if (n == 0)
            return true;

        return false;
    }
}
*/

/*
 解法二 - for each check char array to get only 1 value
 */
/*
public class Solution
{
    public bool IsPowerOfTwo(int n)
    {
        if (n < 1)
            return false;

        string binary = Convert.ToString(n, 2);
        char[] c = binary.ToCharArray();

        int counter = 0;
        for (int i = 0; i < c.Length; i++)
        {
            if (c[i] == '1')
                counter++;
        }

        if (counter == 1)
            return true;
        else
            return false;
    }
}
*/

 

三、思路筆記

題目為找尋整數 n 是否為 2 的整數 x 次方。

目前我想到的方式有三種,

解法一,取 MOD,如果 n 是 2 的 x 次方的話,則其一定可被2整除之特性。

解法二,用二進制來表示,如果 n 是 2 的 x 次方的話,只會出現一個 1。

解法三,取 log2(n),如果 n 是 2 的 x 次方的話,log2(n)出來必定是整數。