《算法通关村——幂运算问题解析》
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
题解
二的幂肯定二进制中只有一个1,所以通过 n&(n-1) 是二进制中的最后一个 1 变为 0,此时如果最后一个1 变为 0 了,那么结果就为 0 了。
class Solution {public boolean isPowerOfTwo(int n) {// if(n<=0){// return false;// }// while(n % 2==0){// n /=2;// }// return n == 1;return n > 0 && (n&(n-1)) == 0;}
}
3 的幂
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true
;否则,返回 false
。
整数 n
是 3 的幂次方需满足:存在整数 x
使得 n == 3x
示例 1:
输入:n = 27
输出:true
示例 2:
输入:n = 0
输出:false
示例 3:
输入:n = 9
输出:true
示例 4:
输入:n = 45
输出:false
提示:
-231 <= n <= 231 - 1
题解
class Solution {public boolean isPowerOfThree(int n) {if(n <= 0){return false;}while(n%3==0){n /= 3;}return n == 1;}
}
4 的幂
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true
;否则,返回 false
。
整数 n
是 4 的幂次方需满足:存在整数 x
使得 n == 4x
示例 1:
输入:n = 16
输出:true
示例 2:
输入:n = 5
输出:false
示例 3:
输入:n = 1
输出:true
提示:
-231 <= n <= 231 - 1
思路
代码
class Solution {public boolean isPowerOfFour(int n) {// if(n <= 0){// return false;// }// while(n % 4 == 0 ){// n/=4;// }// return n==1;return n > 0 && (n & (n-1)) ==0 && (n & 0xaaaaaaaa)==0;}
}
点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?
也可以加我QQ(2837468248)咨询说明来意!