【LeetCode】190.颠倒二进制位

这是一道考察位运算的好题,可以说是非常好的一道题。除此之外,还考察了分治法的理解。值得深思!

1. 题目

2. 分析

又是一道看似简单的"简单"题。如果只是简单的调用函数那么肯定是一道简单题,但如果能想到用分治法解决这道题,则可能不是那么简单。

3. 代码

看下官方题解的代码咋写的:

对上述题解做如下叙述:

  • 定义的几个常量M1、M2 是为了做1位、2位、4位、8位交换。16位的交换直接在最后用return实现了。
  • 接着看下红框的代码含义:
    (1)n>>1 & M1 第一步,n>>1是为了 挑出奇数位,再与M1做与操作是为了只留下奇数位。因为n的偶数位因为右移变成了奇数位,而M1的奇数位都是0,所以&操作后都是0。
    (2)(n & M1) << 1 先获取n的偶数位,然后将偶数位左移。
    (3)将上述两个结果做或操作,得到 "交换奇偶位的操作"

同理,交换2位、4位、8位都是同样的道理。

相关推荐
Scabbards_1 小时前
面试Leetcode - 算法合集
算法·leetcode·面试
程序猿炎义1 小时前
【llm-algo-leetcode学习笔记】显存与性能认知底座
笔记·学习·leetcode
rannn_1111 小时前
【力扣hot100】二叉树专题+总结
java·算法·leetcode·二叉树
啊嘞嘞?1 小时前
力扣(岛屿数量)
算法·leetcode
zander2581 小时前
LeetCode 198. 打家劫舍
算法·leetcode·深度优先
吃着火锅x唱着歌1 小时前
LeetCode 648.单词替换
算法·leetcode·职场和发展
Elsa️7462 小时前
leetcode 14.最长公共前缀
算法·leetcode·职场和发展
203号居民15 小时前
LeetCode hot 100 —41. 缺失的第一个正数
数据结构·算法·leetcode
evans在进步18 小时前
LeetCode 322:零钱兑换——Java 动态规划详解
java·leetcode·动态规划
Tisfy20 小时前
LeetCode 3471.找出最大的几近缺失整数:三种情况判断
算法·leetcode·题解·分类讨论