Skip to content

Latest commit

 

History

History
72 lines (63 loc) · 1.37 KB

File metadata and controls

72 lines (63 loc) · 1.37 KB

693. 交替位二进制数

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

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

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

题解 (Rust)

1. 移位并比较最后两位

impl Solution {
    pub fn has_alternating_bits(n: i32) -> bool {
        let mut n = n;
        let mut pre = n & 1;
        while n != 0 {
            n >>= 1;
            if pre == n & 1 {
                return false;
            }
            pre = n & 1;
        }

        true
    }
}

2. 计算有效交替位二进制数

impl Solution {
    pub fn has_alternating_bits(n: i32) -> bool {
        let mut i = 1;
        while i > 0 && i < n {
            match i % 2 {
                1 => i = 2 * i,
                _ => i = 2 * i + 1,
            };
        }

        i == n
    }
}