package com.heu.wsq.leetcode.interview_book;
/**
* 面试题 05.01. 插入
* @author wsq
* @date 2021/5/13
* 给定两个整型数字 N 与 M,以及表示比特位置的 i 与 j(i <= j,且从 0 位开始计算)。
* 编写一种方法,使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域,不足之处用 0 补齐。
* 具体插入过程如图所示。
* 题目保证从 i 位到 j 位足以容纳 M, 例如: M = 10011,则 i~j 区域至少可容纳 5 位。
*
* 示例1:
* 输入:N = 1024(10000000000), M = 19(10011), i = 2, j = 6
* 输出:N = 1100(10001001100)
*
* 链接:https://leetcode-cn.com/problems/insert-into-bits-lcci
*/
public class InsertBits {
/**
* 下次遇见需要将数字的某一位进行变更时,一定要想到这种方式,采用左移1的方式去实现
* 一开始这个思路也想到了,但是在怎么设置i-j位置为0时,没想想到一位一位来
* 以后要记得"左移1的操作"
* @param N
* @param M
* @param i
* @param j
* @return
*/
public int insertBits(int N, int M, int i, int j){
// 将N的对应i-j的位置置为0
for(int k = i; k <= j; k++){
if((N & (1<<k)) != 0){
N ^= (1 << k);
}
}
// 将M左移i位
M <<= i;
// 最后将两个数按位进行 “或运算”
return N | M;
}
}
面试题 05.01. 插入(位运算)
最新推荐文章于 2024-11-04 20:33:37 发布
本文介绍了一道LeetCode上的经典面试题——如何将一个整数M的二进制形式插入到另一个整数N的指定二进制位区间[i, j]中。文章提供了详细的解题思路与Java代码实现,展示了如何通过位操作完成这一任务。
摘要由CSDN通过智能技术生成