栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode-693. 交替位二进制数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode-693. 交替位二进制数

题目描述:

给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。

解题思路一:先把n转为2进制数(有一个模板可以看看解题思路三)若有相邻的两位相等的话,可以直接返回false,否则返回true;
class Solution {
public:
    string binaryNum(int n){//n=5;
        string s;
        string s1="01";
        while(n>0){
            int x=n%2;
            s=s1[x]+s;//一:1+"" 二:0+"1" 三:1+"01"
            n/=2;
        }
        return s;
    }
    bool hasAlternatingBits(int n) {
        string s=binaryNum(n);
        int i=1;
        int m=s.size();
        if(n<=1){
            return true;
        }else{
            while(s[i]!=''){
                if(s[i]!=s[i-1]) ++i;
                else return false;
            }
        }
        return true;
    }
};
解题思路二:两行代码流???//判断括号尽量别省略

C++中^运算是求异或的:同0异1
若n中二进制每位均不同,则n与n右移一位异或得全1;如:5
原来的n:101
右移的n1:010
结果的n2:111
得到n2后,n2加1便得1000,他俩且运算便得全0;
否则n不满足条件;

bool hasAlternatingBits(int n) {
        n = (n ^ (n >> 1));
        return (n & ((long)n + 1)) == 0;
    }
解题思路三:十进制数转为其他进制数如m进制

每次取最低位,求余是为了得到最低位的数
除是为了右移一位,因为上面已经得到了最低一位数

string binaryNum(int n){//n=5;
        string s;
        string s1="0123456789abcdef";
        while(n>0){
            int x=n%m;
            s=s1[x]+s;//一:1+"" 二:0+"1" 三:1+"01"
            n/=2;
        }
        return s;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784220.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号