Invert k-th Most Significant Bits of N in Java

2025年5月9日 | 阅读 3 分钟

问题陈述

反转数字 N 的第 k 个最高有效位 (MSB) 涉及翻转从最左侧位开始计数的第 k 个位置的位。

问题解决方案

过程如下

  1. 创建掩码:一个在第 k 个位置为 1 的掩码。
  2. 使用 XOR:应用 XOR 来反转位。如果位是 1,则变为 0;如果位是 0,则变为 1。

例如,对于 N = 59 (二进制 111011) 和 k = 3,反转第 3 位得到 51 (二进制表示 110011)。此技术在 操作中用于标志操作等任务。

示例 1

输入:N = 10, K = 1

输出 2

10 的二进制形式是 1010。当第一位被反转时,它变成 0010,其十进制值为 2。

示例 2

输入:N = 32, K = 2

输出 48

32 的二进制形式是 100000。通过翻转第二位,它变为 110000,其十进制值为 48。

位操作方法

首先,确定 N 中位的总数。如果位的数量小于 K,则返回 N 作为结果。否则,翻转 N 的第 K 个最高有效位,然后返回翻转后的新数字。

算法

步骤 1:确定 n 的 二进制 表示所需的位数,并将二进制数字保存在 数组中。

步骤 2:如果 k 大于 n 中的总位数,则不更改地返回 n。

步骤 3:通过切换其值(从 0 到 1 或从 1 到 0)来更改二进制数组中的第 k 位。

步骤 4:计算更新后的二进制数组的十进制值。

步骤 5:输出翻转第 k 位后得到的十进制值。

实施

输出

 
37  

时间和空间复杂度:O((log(m)+log(n))