IOS 算法(基础篇) ----- 2 的幂

2021-05-31  本文已影响0人  ShawnAlex

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
-2^31 <= n <= 2^31 - 1

例子

输入:n = 1
输出:true
解释:2^0 = 1

输入:n = 16
输出:true
解释:2^4 = 16

输入:n = 3
输出:false

输入:n = 5
输出:false

解题思路

比较好理解为遍历法, 依次遍历 % 2, 判断当余数为1的时候,是否此时n = 1

这里介绍另一种方法: 进制法
首先理解 2次方的一个特性, 转成二进制按位与&, n & (n - 1) == 0 (留意与&特性: 1&1 = 1, 1&0 = 0, 0&0 = 0)
举个例子:
n = 8 = 1000(二进制)
n - 1 = 7 = 0111(二进制)

1000
&
0111
= 0

n = 16 = 10000(二进制)
n - 1 = 15 = 01111(二进制)

10000
&
01111
= 0

代码

    func isPowerOfTwo(_ n: Int) -> Bool {
        return n > 0 && n & (n - 1) == 0
    }

题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址

上一篇 下一篇

猜你喜欢

热点阅读