原题链接:https://leetcode.com/problems/power-of-two/description/
实现如下:
/**
* Created by clearbug on 2018/2/26.
*
* 这道题目虽然级别为 easy,我初看也以为很简单。但是,苦思良久竟毫无对策。。。无奈之下,看了下面??参考里面所说的博客。
*/
public class Solution {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.isPowerOfTwo(7));
System.out.println(s.isPowerOfTwo(8));
}
/**
* 方法三:启用诀窍,放大招了
*
* Submission Detail: 10.29%
* Runtime: 5 ms
*
* 这么牛逼的大招,提交结果却是这样子,没天理啊!!!
*
* @param n
* @return
*/
public boolean isPowerOfTwo(int n) {
if (n <= 0) {
return false;
}
return (n & (n - 1)) == 0;
}
/**
* 方法二:判断 n 的二进制形式里面 1 的个数
*
* Submission Detail: 10.29%
* Runtime: 5 ms
*
* @param n
* @return
*/
public boolean isPowerOfTwo2(int n) {
if (n <= 0) {
return false;
}
int count = 0;
while (n >= 1) {
if ((n & 1) == 1) {
count++;
}
n >>>= 1;
}
if (count == 1) {
return true;
}
return false;
}
/**
* 方法一:逐级判断,可用递归或者循环迭代实现
*
* Submission Detail: 5.27%
* Runtime: 6 ms
*
* @param n
* @return
*/
public boolean isPowerOfTwo1(int n) {
if (n <= 0) {
return false;
}
if (n == 1) {
return true;
}
if (n >= 2 && n % 2 == 0) {
return isPowerOfTwo(n / 2);
}
return false;
}
}
参考
https://blog.csdn.net/chenchaofuck1/article/details/51226899