| 题目 | 思路 | 备注 |
|---|---|---|
| 位1的个数 | 移位 + 递归,一行代码 | 一行代码:return n==0 ? 0 : ( n & 1) + recursion(n >>> 1); |
| 汉明距离 | 移位+递归,一行代码 | 汉明距离定义:对应二进制位不同的位置数目, 一行代码如下—— return x==y ? 0 : ((x & 1) == (y & 1) ? 0:1) + recursion(x >>> 1, y >>>1); |
| 颠倒二进制位 | 栈思想:n不断右移取末位数追加到r的末位 | 32次如下操作(结果左移,然后加上从n中取到的末位数字)—— ret = (ret << 1) + (n & 1); n = n >>> 1; |
| 找缺失的数字 | 原理: a^b^a = b; 因数字范围是[0,n],故可利用数组下标: [0,n] 共n个(缺了一个)与数组的n个下标[0, n-1]做异或运算 |
ret = n; for(inti=0;i<n; i++) ret = ret ^ i ^ nums[i]; |
| 两整数之和 | 思路一:考虑二进制格式的两数相加 - (a & b) << 1 表示两数和的进位部分,因此需要左移一位 - a^b 表示两数和的不进位部分 |
思路二: 使用对数性质,将加减转换为乘除: =>
|
- 位运算,一行代码:

- 对数运算
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
