加载中...
面试题 05.01-插入(Insert Into Bits LCCI)
发表于:2021-12-03 | 分类: 简单
字数统计: 167 | 阅读时长: 1分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/insert-into-bits-lcci

英文原文

You are given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to insert M into N such that M starts at bit j and ends at bit i. You can assume that the bits j through i have enough space to fit all of M. That is, if M = 10011, you can assume that there are at least 5 bits between j and i. You would not, for example, have j = 3 and i = 2, because M could not fully fit between bit 3 and bit 2.

Example1:

 Input: N = 10000000000, M = 10011, i = 2, j = 6
 Output: N = 10001001100

Example2:

 Input:  N = 0, M = 11111, i = 0, j = 4
 Output: N = 11111

中文题目

给定两个整型数字 NM,以及表示比特位置的 iji <= j,且从 0 位开始计算)。

编写一种方法,使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域,不足之处用 0 补齐。具体插入过程如图所示。

题目保证从 i 位到 j 位足以容纳 M, 例如: M = 10011,则 i~j 区域至少可容纳 5 位。

 

示例1:

 输入:N = 1024(10000000000), M = 19(10011), i = 2, j = 6
 输出:N = 1100(10001001100)

示例2:

 输入: N = 0, M = 31(11111), i = 0, j = 4
 输出:N = 31(11111)

通过代码

高赞题解

插入

CC189 面试题 04.06

难度:

  • 简单

tags:

  • 位运算

题目描述

插入。给定两个32位的整数NM,以及表示比特位置的ij。编写一种方法,将M插入N,使得M从N的第j位开始,到第i位结束。假定从j位到i位足以容纳M,也即若M = 10 011,那么j和i之间至少可容纳5个位。例如,不可能出现j = 3和i = 2的情况,因为第3位和第2位之间放不下M。

示例1:

输入:N = 10000000000, M = 10011, i = 2, j = 6
输出:N = 10001001100

示例2:

输入: N = 0, M = 11111, i = 0, j = 4
输出:N = 11111

思路

按题目的意思,并不是把 M 移位后和 N 相加,而只是单纯地覆盖。所以可以分两步进行:

  1. 把 N 中 i - j 的位置置零先
  2. 把 M 左移 i 位后和 N 相加
class Solution {
public:
  int insertBits(int N, int M, int i, int j) {
    for (int k = i; k <= j; k++) {
      if (N & (1 << k)) {
        N -= (1 << k);
      }
    }
    N += (M << i);
    return N;
  }
};

统计信息

通过次数 提交次数 AC比率
10081 19989 50.4%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
面试题 04.08-首个共同祖先(First Common Ancestor LCCI)
下一篇:
面试题 05.06-整数转换(Convert Integer LCCI)
本文目录
本文目录