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