程序员面试金典 5.1

Insertion:给定两个32位整数NM,将M插入到N的第i位到第j位,题目保证第i位到第j位可以容纳M,最低有效位在最右。

把大象装进冰箱需要3步:

  • N的第i位到第j位复位
  • M左移i
  • NM合并

因为第j位也要复位,所以应该掩码应该左移j + 1位。

不知道为什么,力扣上左移或者右移达到32位会出错,所以要用unsigned long long

class Solution {
public:
    int insertBits(int N, int M, int i, int j) {
        unsigned long long mask = ULLONG_MAX << (j + 1);
        mask ^= (1 << i) - 1;
        N &= (unsigned int)mask;
        M <<= i;
        return N | M;
    }
};
发布了194 篇原创文章 · 获赞 2 · 访问量 7728

猜你喜欢

转载自blog.csdn.net/RayoNicks/article/details/105351455
今日推荐