题目来源:
leetcode题目,网址:面试题 05.01. 插入 - 力扣(LeetCode)
解题思路:
截取 N 第 j 位到 31 位,M 低 j-i+1 位,N 低 i 位,拼接即可。
解题代码:
class Solution {
public:
int insertBits(int N, int M, int i, int j) {
int res=j==31?0:N>>(j+1); //j-32 的部分
res=res<<(j-i+1);
res=res |(getLow(M,j-i+1));//i-32 的部分
res=res<<(i);
res=res |(getLow(N,i));//0-32 的部分
return res;
}
int getLow(int num,int bits){ //获得num 低 bits 位
int temp=0;
for(int i=0;i<bits;i++){
temp=temp<<1;
temp=temp |1;
}
return num & temp;
}
};
总结:
数字位数是从 0 开始,而右移需要至少 1 位。有点烦,注意边界条件。
无官方题解。