位运算
231. 2 的幂
https://leetcode.cn/problems/power-of-two/
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
通过 n & -n
获得最后一位 1,在二进制中只会有一位 1,所以那个 1 转化为十进制就为 n 。
191. 位 1 的个数
https://leetcode.cn/problems/number-of-1-bits/
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。
通过 n = n & (n - 1)
每次都能消灭一个 1,直到 n 为 0 时退出即可。
190. 颠倒二进制位
https://leetcode.cn/problems/reverse-bits/
颠倒给定的 32 位无符号整数的二进制位。
每次将 res 左移一位,值得一提的是 res << 1
与 res * 2
相等。然后取出 n 的第 i 位即可。
50. Pow(x, n)
https://leetcode.cn/problems/powx-n/
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。
按照定义,计算 x 的 n 次方是将 nn 个 x 连乘,效率比较低,会超时。因为乘法具有结合律,考虑每次将一部分连乘批量计算好,作为最终答案的一部分。这就可以将 n 进行二进制拆分,若 n 的二进制位的第 k 位是 1,则 ans 可以乘上 x2k。 而计算 x2k,只需每次将自身做平方即可。
136. 只出现一次的数字
https://leetcode.cn/problems/single-number/
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
进行异或操作。
Last updated