Leetcode刷题44-693. 交替位二进制数(C++详细解法!!!)

本文介绍了LeetCode第44题至693题的交替位二进制数问题,通过详细解析C++解决方案,包括暴力法和位操作法,并分享了个人学习体会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目来源:链接: [https://leetcode-cn.com/problems/binary-number-with-alternating-bits/].

1.问题描述

给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。
示例1:

输入: 5
输出: True
解释:
5的二进制数是: 101

示例2:

输入: 7
输出: False
解释:
7的二进制数是: 111

示例3:

输入: 11
输出: False
解释:
11的二进制数是: 1011

示例4:

输入: 10
输出: True
解释:
10的二进制数是: 1010

2.我的解决方案

easy 类型题目
感觉我的做法好low哦。。。统计每个位数,检验相邻位是否一致。
暴力法代码如下:

class Solution {
public:
    bool hasAlternatingBits(int n) {
        int tmp;
        vector<int> res;
        if(n==0 || n==1)
        {
            return true;
        }
        while(n)
        {
            tmp = n%2;
            res.push_back(tmp);
            n = n/2;
        }
        
        for(int i = 1; i < res.size(); ++i)
        {
            if(res[i] == res[i-1])
            {
                return false;
            }
        }
        return true;
    }
};

3.大神们的解决方案

当然是位操作啊。
就是我不太熟悉。。。要多加练习~
代码如下:

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

4.我的收获

继续加油吧。。。

2019/4/3 胡云层 于南京 44

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值