程序员面试金典——面试题 05.01. 插入

一、题目介绍

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

示例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)

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/insert-into-bits-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

       本题考查位运算,具体步骤如下:

(1)将参数N的第i位到第j位均置零。

(2)将参数M左移i位。

(3)将M与N进行或运算,即为结果。

三、解题代码

class Solution {
public:
    int insertBits(int N, int M, int i, int j) {
        int mask = ((1 << (j-i+1))-1) << i;
        mask = ~mask; //取反
        N &= mask;
        M <<= i;
        return M|N;
    }
};

四、解题结果

猜你喜欢

转载自blog.csdn.net/qq_39661206/article/details/108124178