欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-13 12:32:29
...

比如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