题目来源:
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 位。有点烦,注意边界条件。
无官方题解。