1611. 使整数变为 0 的最少操作次数

1611. 使整数变为 0 的最少操作次数

格雷码解法的数学原理

1. 格雷码的本质特性

格雷码(Gray Code)是一种二进制编码系统,其中任意两个相邻数的二进制表示仅有一位不同。这个特性与本题要求的"每次只能翻转一个比特位"的操作限制完全匹配,因此n到0的最少位操作次数恰好等于n的格雷码值。

2. 核心数学公式

n的格雷码值计算公式为:

G(n) = n ⊕ (n >> 1)

(⊕表示异或运算,>>表示右移操作)

3. 算法实现逻辑
python 复制代码
def minimumOneBitOperations(n: int) -> int:
    result = 0
    while n > 0:
        result ^= n  # 累积异或结果
        n >>= 1      # 右移消除最低位
    return result
4. 运算过程解析(以n=9为例)
  • 二进制表示:9 = 1001₂
  • 步骤1:result = 0 ⊕ 1001 = 1001(9),n变为100(4)
  • 步骤2:result = 1001 ⊕ 100 = 1101(13),n变为10(2)
  • 步骤3:result = 1101 ⊕ 10 = 1111(15),n变为1(1)
  • 步骤4:result = 1111 ⊕ 1 = 1110(14),n变为0
  • 最终结果:14(与预期一致)
5. 几何意义

可以将二进制数视为n维超立方体的顶点,每次位翻转相当于在立方体的边上移动。格雷码对应着一条遍历所有顶点的哈密顿路径,而算法计算的正是从n点到原点的最短路径长度。

相关推荐
AI情绪识别开源11 小时前
检信 AI 智能推广平台(代号:JX-Promote)
人工智能·算法·erlang
老当益壮梁奶奶12 小时前
Linux软件编程学习笔记(八):进程间通信详解(1)
linux·c语言·笔记·学习·算法
不会就选b12 小时前
算法日常・每日刷题--<BFS拓扑排序>4
算法
不正经学生12 小时前
C语言动态内存管理(上):堆上的自由与责任
c语言·开发语言·c++·算法·面试
伟大的车尔尼12 小时前
贪心的概念
数据结构·算法·贪心
方方洛12 小时前
vllm教程-00-前言与导读
人工智能·算法·vllm
IT毕设实战小研13 小时前
电影数据可视化推荐系统
大数据·后端·爬虫·python·算法·信息可视化·课程设计
且随疾风前行.13 小时前
从驱动来分析服务的添加过程
算法
CoderYanger13 小时前
A.每日一题:输入单词需要的最少按键次数 Ⅰ+Ⅱ
java·数据结构·算法·leetcode·面试
xiaokcehui14 小时前
地球物理大地测量学计算系列之十七局部重力场SRBF逼近及其性能指标测评
人工智能·算法·机器学习