power-of-two(2的幂)

179 篇文章 0 订阅
178 篇文章 5 订阅

题目

Given an integer, write a function to determine if it is a power of two.

Example 1:

Input: 1
Output: true
Explanation: 20 = 1
Example 2:

Input: 16
Output: true
Explanation: 24 = 16
Example 3:

Input: 218
Output: false

代码

代码一

package power_of_two;
public class Solution {
    public boolean isPowerOfTwo(int n) {
    	//排除n小于0的情况
    	if(n<0)return false;
    	//2 ---2^0----1
    	//2 ---2^1----10
    	//2 ---2^2----100
    	//2 ---2^3----1000
    	//2 ---2^4----10000
    	//2的幂次方的整数,转化为二进制时,前面为1,后面都是0
    	String b = Integer.toBinaryString(n);
    	for (int i = 0; i < b.length(); i++) {
    		int c = Integer.valueOf(b.substring(i, i+1));
			if(i==0) {
				if(c==1) {
					continue;
				}else {
					return false;
				}
			}
			if(c==0) {
				continue;
			}else {
				return false;
			}
		}
		return true;
    }
    
    public static void main(String[] args) {
//    	int b = 16;
//    	int b = 3;
//    	int b = -2147483648;
    	int b = 0;
    	Solution s = new Solution();
		System.out.println(s.isPowerOfTwo(b));
	}
}

代码二,(官方)

不断除2,最后得到1的,这个整数就是2的幂次方数。

4/2=2...0
2/2=1...0

再看看6

6/2=3...0
3%2=1,1不等于0,跳出while循环
3不等于1,返回false
class Solution {
  public boolean isPowerOfTwo(int n) {
    if (n == 0) return false;
    while (n % 2 == 0) n /= 2;
    return n == 1;
  }
}

代码三,位运算,获取二进制中最右边的 1(官方)

class Solution {
  public boolean isPowerOfTwo(int n) {
    if (n == 0) return false;
    long x = (long) n;
    return (x & (-x)) == x;
  }
}

代码四,位运算,去除二进制中最右边的 1(官方)

不建议看这个,太复杂了。

class Solution(object):
    def isPowerOfTwo(self, n):
        if n == 0:
            return False
        return n & (n - 1) == 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值