[更文刷题] 231. 2 的幂

105 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

一、题目描述:

231. 2 的幂 - 力扣(LeetCode) (leetcode-cn.com)

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false

如果存在一个整数 x 使得 n == 2x ,则认为 n2 的幂次方。

示例 1:

输入:n = 1
输出:true
解释:20 = 1

示例 2:

输入:n = 16
输出:true
解释:24 = 16

示例 3:

输入:n = 3
输出:false

示例 4:

输入:n = 4
输出:true

示例 5:

输入:n = 5
输出:false

提示:

-2^31 <= n <= 2^31 - 1

二、思路分析:

判断一个数是否是2的幂次方
1)如果是1,直接返回true
2)如果不是需要判断能否被2整除,能被整除取除2的商,判断商是否是1,是1说明是2的幂次方,返回true
3)商不是1就把商循环执行2)操作,直至得到结果

拿到这题时,我想到是先判断是否是0或1这两种特殊情况,是1返回true;是0返回false,如果是其他数,通过while循环判断能否被2整除,如果能被2整除,取整数与2相除的商,判断商是否是1,是1说明是2的幂次方返回true

三、AC 代码:

class Solution {
    public boolean isPowerOfTwo(int n) {
       if (n == 1) {
            return true;
        } else if (n == 0) {
            return false;
        }
        //判断整数能否被2整除
        while (n % 2 == 0) {
            //能被2整除,取整数与2相除的商
            n /= 2;
            //判断除后是否等于1,是1直接返回true
            if (n == 1) {
                return true;
            }
        }
        return false;
}

四、总结:

看了其他大神的答案,原来还有位运算来解答的,很不错,学到了。

五、参考:

231.2的幂(简单):C语言 递归算法 详细注释 - 2 的幂 - 力扣(LeetCode)

5种解法,你应该背下的位操作知识 - 2 的幂 - 力扣(LeetCode)

新手篇🎈 二进制加减法 与 负数储存机制 - 2 的幂 - 力扣(LeetCode)