算法:Java实现判断一个数是否是2的N次方

Posted chenry777

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法:Java实现判断一个数是否是2的N次方相关的知识,希望对你有一定的参考价值。

比如2 4 8 16,是的;6 10 不是的。就看这个数是不是可以拆成N个2相乘。

解法一:暴力解法,循环,

    public static boolean solution1(int x) {
        // 4 6 16 是2的n次方 , 15 不是
        if (x == 0 || x == 1) {
            return true;
        }
        while (x > 1) {
            int i = (x % 2 == 0) ? (x /= 2) : (x = 0);
        }
        if (x == 1) return true;
        return false;
    }

时间复杂度:O(log(n))

解法二:&运算

小知识: 若 x 满足 x = 2^n, 则 x & (x - 1) == 0

    public static boolean solution2(int x) {
        // 4 6 16 是2的n次方 , 15 不是
        if ((x & (x - 1)) == 0) return true;
        return false;
    }

时间复杂度:O(1)

以上是关于算法:Java实现判断一个数是否是2的N次方的主要内容,如果未能解决你的问题,请参考以下文章

面试题判断一个数是否为2的N次方---终极接法来啦

怎么巧判断一个整数是不是是2的n次方幂

判断一个数是否时2的整数次方

用最快的方法判断一个数是否2的n次方

如何判断一个数是不是是2的n次方

位运算判断一个数是否为2的n次方