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;
}
};