2的幂
题目描述
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
code
方法一
因为在leetcode上超时,所以需要进行优化
/**
* 结果: 超过时间限制
* 需要进行优化
*/
class Solution {
public boolean isPowerOfTwo(int n) {
boolean flg = false;
int sq = (int) (n/2);
for (int i = 0; i <=sq; i++) {
if (Math.pow(2, i) ==n) {
return true;
}
}
return false;
}
}
方法二
class Solution {
public boolean isPowerOfTwo(int n) {
boolean flg = false;
if(n ==1) return true;
if (n % 2 != 0) {
return false;
}
/**
* 0-1
* 1-2
* 2-8
*/
while (n >1) {
int tmp = n%2;
if (tmp == 1) {
return false;
}
n = n/2;
}
if(n==1) return true;
else return false;
}
}
执行用时 :2 ms , 在所有 java 提交中击败了60.67%的用户
内存消耗 :33.6 MB, 在所有 java 提交中击败了12.13%的用户
感觉效率一般,还不是特别好,再进行优化,分析效率慢的地方,再优化
方法三
参考别人提交
效率100%
/**
* 使用位运算进行处理
*/
class Solution {
public boolean isPowerOfTwo(int n) {
if (n <= 0) return false;
//原理: 2的次幂, 从二进制上来讲, 最高位是1, 其他位全是0 神奇,自己没想到,效率100%
if ((n & n - 1) == 0) return true;
return false;
}
}