693. Binary Number with Alternating Bits的C++解法

本文介绍了一种算法,用于判断一个整数的二进制表示中位数是否呈交替状态(如0101...)。提供了两种实现方法:一种通过取余和除法操作来检查奇偶交替;另一种利用位移比较前后位数的奇偶性。

速度超过了100%的测试者啊哈哈,就是如果余数和上一个不一样就用2一直除下去,一样就返回false。

class Solution {
public:
	bool hasAlternatingBits(int n) {
		int flag = n % 2;
		n = n / 2;
		while (n > 0)
		{
			int tmp = n % 2;
			if (tmp == flag) return false;
			flag = tmp;
			n = n / 2;
		}
		return true;
	}
};

提供另外一个思路:

题目其实要求的是一个数每次除以2和之前的数字是一奇一偶,也就是差数为奇数,所以也有这样的写法:

class Solution {
public:
    bool hasAlternatingBits(int n) {
        if (n == 0 ) return false;
        int tmp;
        while (n!=0){
            tmp = n >> 1;
            if ((n - tmp) %2 == 0) return false;  # early break
            n = tmp;
        }
        return true;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值