携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情
一、题目描述:
231. 2 的幂 - 力扣(LeetCode) (leetcode-cn.com)
给你一个整数 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
提示:
-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)