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);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章