Skip to content

Latest commit

 

History

History
49 lines (41 loc) · 1.25 KB

0342.4的幂.md

File metadata and controls

49 lines (41 loc) · 1.25 KB

解题关键点

  • 方法1,使用数学解法
    • 首先要转为浮点数,然后使用 4 作为底求对数,判断拿到的结果是不是整数即可
    • 和 js 不同,Rust 不需要换底公式
  • 方法2,基于2进制
    • 4 的幂有一个特点,就是转为二进制的话,它只有 1 个 1,而且 1 之后的 0 的个数为偶数

代码

方法 1

impl Solution {
    pub fn is_power_of_four(n: i32) -> bool {
        // 负数和 0 直接跳过
        if n <= 0 {
            return false;
        }
        // 求对数
        let lg = (n as f64).log(4.0);
        // 和取整的结果做对比即可,此处也可以换成 floor、ceil、round 等方法
        lg == lg.trunc()
    }
}

方法2

impl Solution {
    // 简洁了很多,效率也更高
    pub fn is_power_of_four(n: i32) -> bool {
        // count_ones() 拿到二进制中 1 的数量
        // trailing_zeros() 计算结尾处 0 的个数
        n > 0 && n.count_ones() == 1 && n.trailing_zeros() % 2 == 0
    }
}

测试用例

assert_eq!(is_power_of_four(-4), false);
assert_eq!(is_power_of_four(0), false);
assert_eq!(is_power_of_four(1), true);
assert_eq!(is_power_of_four(5), false);
assert_eq!(is_power_of_four(16), true);