LeetCode 231 2的幂[循环 递归 位运算] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 231 2的幂[循环 递归 位运算] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

在这里插入图片描述解题思路:
首先想到的就是循环判断是否能被2整除,然后除2不停循环下去,直到大于1(因为1本身就属于2的0次幂),当然还要注意小于等于0的输入,直接返回false即可,代码如下:

class Solution {
public:
    bool isPowerOfTwo(int n) {
        if(n <= 0) {
            return false;
        }
        bool flag = true;
        while(n > 1) {
            if(n % 2 == 0) {
                n /= 2;
            } else {
                flag = false;
                break;
            }
        }
        return flag;
    }
};

再来个递归的方式解决,也是同样的思路,代码如下:

class Solution {
public:
    bool isPowerOfTwo(int n) {
        if(n <= 0) {
            return false;
        }
        if(n == 1) {
            return true;
        }
        if(n % 2 == 0) {
            return isPowerOfTwo(n / 2);
        } else {
            return false;
        }
    }
};

能不能不用递归或者循环解决问题呢?当然可以,位运算是解决该题最简便的方式,直接时间复杂度和空间复杂度O(1),就是判断二进制最后一位是否为0,代码如下:

class Solution {
public:
    bool isPowerOfTwo(int n) {
        return n > 0 && (n & (n - 1)) == 0;
    }
};

以上是关于LeetCode 231 2的幂[循环 递归 位运算] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 231. 2 的幂

leetcode刷题笔记342 4的幂

[LeetCode] 231. 2 的幂

[leetcode]231. 2的幂

LeetCode 231. 2的幂

leetcode刷题笔记231 2的幂