LeetCode 题解之 342. Power of Four

342. Power of Four

题目描述和难度

  • 题目描述:

给定一个整数 (32位有符整数型),请写出一个函数来检验它是否是4的幂。

示例:
当 num = 16 时 ,返回 true 。 当 num = 5时,返回 false。

问题进阶:你能不使用循环/递归来解决这个问题吗?

致谢:
特别感谢 @yukuairoy 添加这个问题并创建所有测试用例。

思路分析

求解关键:

1、列出 4 1 4 1 4 2 4 3 等等,找出规律;

4 1 = 2 2 = 2 2 ,表示成二进制就是 100 1 后面 2 个“ 0 ”;
4 2 = ( 2 2 ) 2 = 2 4 ,表示成二进制就是 10000 1 后面 4 个“ 0 ”;
4 3 = ( 2 2 ) 3 = 2 6 ,表示成二进制就是 1000000 1 后面 6 个“ 0 ”;
4 4 = ( 2 2 ) 4 = 2 8 ,表示成二进制就是 100000000 1 后面 8 个“ 0 ”;
4 5 = ( 2 2 ) 5 = 2 1 0 ,表示成二进制就是 10000000000 1 后面 10 个“ 0 ”。

2、如果是负数,直接返回 false;
3、使用位运算的与运算去做判断;
4、不要忘记转换成二进制以后,后面跟的 0 是偶数,所以原来的位数一定是奇数。

参考解答

参考解答1

public class Solution {

    public boolean isPowerOfFour(int num) {
        if (num <= 0) {
            return false;
        }
        String binaryString = Integer.toBinaryString(num);
        // System.out.println(binaryString);
        int len = binaryString.length();
        return len % 2 == 1 && (num & 1 << (len - 1)) == num;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        boolean powerOfFour = solution.isPowerOfFour(-2147483648);
        System.out.println(powerOfFour);
    }
}

本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0342-power-of-four ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 [email protected]


.label-warning {
background-color: #f0ad4e;
}

.label-success {
    background-color: #5cb85c;
}

.label-danger {
    background-color: #d9534f;
}

.label {
    display: inline;
    padding: .2em .6em .3em;
    font-size: 75%;
    font-weight: 700;
    line-height: 1;
    color: #fff;
    text-align: center;
    white-space: nowrap;
    vertical-align: baseline;
    border-radius: .25em;
}

猜你喜欢

转载自blog.csdn.net/lw_power/article/details/80758353
今日推荐