LeetCode算法題解 231-2的冪

題目描述

題解:

  1. 循環判斷法
  2. 遞歸判斷法
  3. 性質法:2的冪對應的二進制數,一定有且只有一個1。

代碼:

class Solution {
public:
    bool isPowerOfTwo(int n) {
        /* 1. 循環解法 
        long long tmp = 1;// 可能num接近INT_MAX,但是tmp*2可能會超出INT_MAX。
        for(int i = 0; ; i++)
        {
            if(tmp == n)
            {
                return true;
            }
            if(tmp > n)
            {
                return false;
            }
            tmp *= 2;
        }*/ 

         /* 2. 遞歸解法 
        return isPowerOfFourSubFun(1,n);
        */

        /* 3. 性質法(二的冪方的數 對應的二進制數中 一定有且只有一個1) */
        int cnt = 0;
        while(n)
        {
            if(n % 2 == 1)
            {
                cnt++;
            }
            if(cnt > 1)
            {
                break;
            }
            n /= 2;
        }
        if(cnt == 1)
        {
            return true;
        }
        else
        {
            return false;
        }

    }

    /* 2. 遞歸解法 */
    bool isPowerOfFourSubFun(long long x,int num)
    {
        if(x == num)
        {
            return true;
        }
        if(x > num)
        {
            return false;
        }
        return isPowerOfFourSubFun(x*2,num);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章