当前位置: 首页 > news >正文

LeetCode——面试题 05.01 插入

通过万岁!!!

  • 题目:一共会给四个数,分别是N、M、i、j,然后希望我们把N和M抓怒换为2进制以后,将M的二进制放在i到j之间的区域,如果M的二进制长度小于i-j+1,则前面补0即可。最后输出转换后的十进制数字。
  • 思路1:最简单的思路当然是直接按照题目要求,将N和M转换为二进制,进行处理,然后再转换为十进制。这里需要用到两个api,一个是Integer.toBinaryString(N),用来将int转换为二进制的string;第二个是Integer.parseInt(binaryString, 2),用来将二进制string转换为10进制。剩下的就比较简单了,不过这两个api我也是第一次用到。所以我的第一反应是我的思路2。
  • 思路2:我们假设i等于0,可以发现,这个题目其实就是让N的后j-i=j位变成0,然后再加上M即可,也就是说,N-des+M。那如果i不等于0,也就是这里需要多一个步骤,就是des和M后面都要往右边移动i位。那就变成了N+(M-des)*2i。到此,我们的问题关键就是找des了。这就简单了,des初始值为0,我们先将N/(2i)得到tmp,然后通过for循环找到tmp的后j-i+1位的数字就好了。
  • 技巧:数学,位运算
class Solution {public int insertBits(int N, int M, int i, int j) {int temp = N / ((int) Math.pow(2, i));int des = 0;for (int k = 0; k < j - i + 1; k++) {des += temp % 2 * (int) Math.pow(2, k);temp = temp / 2;}return N + (M - des) * (int) Math.pow(2, i);}
}
  • 总结:题目比较简单,第一个思路需要对api比较熟,第二个思路用到了小学数学。
http://www.dtcms.com/a/299618.html

相关文章:

  • Vue3组件通信方法清单
  • Linux——线程互斥
  • 云计算技术之docker build构建错误
  • Spring循环依赖以及三个级别缓存
  • Zama+OpenZeppelin:将机密智能合约带入 DeFi 和数字资产领域
  • ClickHouse高性能实时分析数据库-高性能的模式设计
  • JavaScript中.splice()的用法
  • Vue 插槽
  • 数据结构自学Day14 -- 利用归并排序思想实现“外排序”
  • 【MySQL 数据库】MySQL基本查询(第二节)
  • 达梦[-2894]:间隔表达式与分区列类型不匹配
  • 「iOS」————继承链与对象的结构
  • 全球节点的概念
  • 原理篇..
  • mysql的lts版本与Innovation版本区别
  • 考研复习-数据结构-第八章-排序
  • 【工具类】Linux 环境利用 uv 安装多版本 python
  • AI 编程还有多远?我们如何迎接 AI 编程时代?
  • MGRE综合实验
  • 大模型开发工具的汇总
  • 小架构step系列26:Spring提供的validator
  • 秋招Day19 - 分布式 - 分布式事务
  • Android 修改系统时间源码阅读
  • DeepSeek算法学习笔记
  • RabbitMQ--Springboot解决消息丢失
  • Spring Boot集成RabbitMQ终极指南:从配置到高级消息处理
  • Linux进程控制:掌握系统的核心脉络
  • Git版本控制
  • FC(Function Calling)和MCP详解(区别、作用、运用场景)
  • 2.JVM跨平台原理(字节码机制)