20天刷题计划-231. 2 的幂

简介: 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。

一、题目描述:

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

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

 

示例 1:

输入:n = 1 输出:true 解释:20 = 1 示例 2:

输入:n = 16 输出:true 解释:24 = 16 示例 3:

输入:n = 3 输出:false 示例 4:

输入:n = 4 输出:true 示例 5:

输入:n = 5 输出:false  

提示:

-231 <= n <= 231 - 1  

进阶:你能够不使用循环/递归解决此问题吗?

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/po…

二、思路分析:

一个数 n 是 2 的幂,当且仅当 nn 是正整数,并且 n的二进制表示中仅包含 1个 1。

因此我们可以考虑使用位运算,将 n 的二进制表示中最低位的那个 1 提取出来,再判断剩余的数值是否为 0 即可

解题思路如下: 若 n = 2^x

且 x 为自然数(即 n 为 2 的幂),则一定满足以下条件: 恒有 n & (n - 1) == 0,这是因为: n 二进制最高位为 1,其余所有位为 0; n - 1 二进制最高位为 0,其余所有位为 1; 一定满足 n > 0。 在处理完这些边界之后,尝试将 n 除干净,如果最后剩余数值为 1 则说明开始是 2 的幂。 因此,通过 n > 0 且 n & (n - 1) == 0 即可判定是否满足 n = 2^x 。

三、AC 代码:

class Solution {
    public boolean isPowerOfTwo(int n) {
        if (n <= 0) return false;
        while (n % 2 == 0) n /= 2;
        return n == 1;
    }
}

四、总结:

掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐



相关文章
|
5月前
|
C++
3 的幂(C++)
3 的幂(C++)
55 0
|
5月前
大整数的因子(利用求余)
大整数的因子(利用求余)
|
5月前
|
C++
2 的幂(C++)
2 的幂(C++)
46 1
|
5月前
|
C++
4的幂(C++)
4的幂(C++)
38 0
|
存储 C++
求2的N次幂(C++)解决高精度运算
求2的N次幂(C++)解决高精度运算
230 0
|
机器学习/深度学习
1208:2的幂次方表示
1208:2的幂次方表示
130 0
|
Java C++ Python
负数取余,取余和取模
负数取余,取余和取模
|
测试技术 C语言 Python
【C除法和取余】除法和负数取余你真的会了吗?
【C除法和取余】除法和负数取余你真的会了吗?
118 0
【C除法和取余】除法和负数取余你真的会了吗?
20:计算2的幂
20:计算2的幂
121 0