0
点赞
收藏
分享

微信扫一扫

leetcode231-2的幂


文章目录

  • ​​2的幂​​
  • ​​题目描述​​
  • ​​code​​
  • ​​方法一​​
  • ​​方法二​​
  • ​​方法三​​

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;
}
}


举报

相关推荐

0 条评论