Leetcode每日一题 693. 交替位二进制数 简单遍历/位运算

197 阅读1分钟

📖本篇内容:Leetcode每日一题 693. 交替位二进制数 简单模拟/位运算
📑 文章专栏:leetcode每日一题《打卡日常》
📆 最近更新:2022 年 3 月 26日 Leetcode每日一题 682. 棒球比赛 xdm打棒球么 栈看了都摇头~
⭐算法仓库:小付的算法之路——Alascanfu-algorithm.git.io
🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起

🙊写在前面🙊

最近比较忙,所以更的有点晚~

题目

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

示例1:

输入:n = 5
输出:true
解释:5 的二进制表示是:101

示例2:

输入:n = 7
输出:false
解释:7 的二进制表示是:111.

示例3:

输入:n = 11
输出:false
解释:11 的二进制表示是:1011.

提示

  • 1 <= n <= 23112^{31} - 1

📝思路📝

本题考查知识点

  • 思路:简单模拟/位运算
  • 模拟的话,可以算出二进制的每一位然后逐位比较,这是比较清晰的一种遍历解法。
  • 这里不再赘述位运算的思路了,其它uu讲的很清楚了。

⭐代码实现⭐

遍历

class Solution {
    public boolean hasAlternatingBits(int n) {
        StringBuilder str = new StringBuilder();
        while(n > 0){
            str.append(n%2);
            n/=2;
        }
        String s = str.toString();
        for (int i = 0 ;i < s.length()-1;i++){
            if (s.charAt(i) == s.charAt(i+1))return false;
        }
        return true;
    }
}
  • 时间复杂度: O(log2nlog_2n)
  • 空间复杂度: O(11)

位运算

class Solution {
    public boolean hasAlternatingBits(int n) {
        int x = n ^ (n >> 1);
        return (x & (x + 1)) == 0;
    }
}
  • 时间复杂度: O(11)
  • 空间复杂度: O(11)

运行结果

遍历

位运算 image.png

🙊写在最后🙊

2022- 3- 28今天小付打卡了哦~

美好的日出 美好的山河

都因有你存在 而璀璨 耀眼

6.gif