leetcode/
power_of_two.rs

1//! # 231. 2的幂
2//!
3//! 难度 简单
4//!
5//! 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
6//!
7//! ## 示例 1:
8//!
9//! ```text
10//! 输入: 1
11//! 输出: true
12//! 解释: 2^0 = 1
13//! ```
14//!
15//! ## 示例 2:
16//!
17//! ```text
18//! 输入: 16
19//! 输出: true
20//! 解释: 2^4 = 16
21//! ```
22//!
23//! ## 示例 3:
24//!
25//! ```text
26//! 输入: 218
27//! 输出: false
28//! ```
29//!
30//! See [leetcode](https://leetcode-cn.com/problems/power-of-two/)
31
32pub struct Solution;
33
34impl Solution {
35
36    /// 2 的幂:大于 0,而且二进制表示中只有一个 1。
37    ///
38    /// n > 0 时才有可能是 2 的幂
39    /// `n & (n - 1)` 相当于把最后一位的 `1` 变成 `0`,如果结果为 `0` 那就是 2 的幂,否则不是。
40    pub fn is_power_of_two(n: i32) -> bool {
41        n > 0 && n & (n - 1) == 0
42    }
43}
44
45#[cfg(test)]
46mod tests {
47    use super::*;
48
49    #[test]
50    fn test() {
51        let t = |n| Solution::is_power_of_two(n);
52
53        assert_eq!(false, t(-2147483648));
54        assert_eq!(false, t(-2));
55        assert_eq!(true, t(1));
56        assert_eq!(true, t(16));
57        assert_eq!(false, t(218));
58    }
59}