主页 > 手机  > 

693.交替位二进制数

693.交替位二进制数

交替位二进制数 题目描述尝试做法推荐做法

题目描述

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

示例 1:

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

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

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

提示:

1 <= n <= 231 - 1

尝试做法 class Solution { public boolean hasAlternatingBits(int n) { int is = n&1; n >>>= 1; while(n > 0){ if(is == (n&1)){ return false; } is = n&1; n >>>= 1; } return true; } }

用最多32次的循环比较前后位是否相同 本来想用字掩码做的,当时没找到合适的做法

推荐做法 class Solution { public boolean hasAlternatingBits(int n) { int x = n ^ (n >> 1); return (x & (x + 1)) == 0; } } 作者:宫水三叶 链接: leetcode /problems/binary-number-with-alternating-bits/solutions/1374269/gong-si-shui-by-ac_oier-zuw7/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

当给定值 n 为交替位二进制数时,将 n 右移一位得到的值 m 仍为交替位二进制数,且与原数 n 错开一位,两者异或能够得到形如 0000…1111 的结果 x,此时对 x 执行加法(进位操作)能够得到形如 0000…10000 的结果,将该结果与 x 执行按位与后能够得到全 0 结果。

作者:宫水三叶 链接: leetcode /problems/binary-number-with-alternating-bits/solutions/1374269/gong-si-shui-by-ac_oier-zuw7/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:

693.交替位二进制数由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“693.交替位二进制数