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);
    }
};
发布了197 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41708792/article/details/103149189