Insertion:给定两个32位整数N和M,将M插入到N的第i位到第j位,题目保证第i位到第j位可以容纳M,最低有效位在最右。
把大象装进冰箱需要3步:
- 将
N的第i位到第j位复位 - 将
M左移i位 - 将
N和M合并
因为第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;
}
};
本文介绍了一种高效的算法,用于在32位整数N的指定位置i到j之间插入另一个整数M。通过三步操作实现:首先复位N的i到j位,接着左移M至正确位置,最后将两者合并。文章提供了详细的代码实现,使用unsigned long long类型避免溢出问题。
190

被折叠的 条评论
为什么被折叠?



