news 2026/9/4 16:16:49

Kimi 进阶 LeetCode 29. 两数相除 Rust实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kimi 进阶 LeetCode 29. 两数相除 Rust实现

LeetCode 29. 两数相除 - Rust 实现

核心思路

这道题要求不使用乘法、除法和取模运算符来实现整数除法。标准解法是倍增法(位移模拟):

  1. 处理符号:记录结果的符号,将两个数转为同号处理
  2. 倍增逼近:将除数不断左移(×2),找到不超过被除数的最大值
  3. 累加商值:对应左移的位数,累加1 << n到结果
  4. 处理余数:用被除数减去已逼近的值,重复上述过程
  5. 溢出处理:-2^31 / -1结果超出i32范围,需返回i32::MAX
implSolution{pubfndivide(dividend:i32,divisor:i32)->i32{// 处理溢出唯一情况:-2^31 / -1 = 2^31,超出 i32 范围ifdividend==i32::MIN&&divisor==-1{returni32::MAX;}// 判断结果符号:异号为负letnegative=(dividend>0)!=(divisor>0);// 转为 i64 并取绝对值,避免溢出(i32::MIN 的绝对值会溢出)letmutdvd=(dividendasi64).abs();letmutdvs=(divisorasi64).abs();letmutresult:i64=0;whiledvd>=dvs{letmuttemp=dvs;letmutmultiple=1_i64;// 倍增:除数不断左移(×2),直到超过被除数// temp << 1 等价于 temp * 2,但使用位移更直观whiledvd>=(temp<<1){temp<<=1;multiple<<=1;}// 减去已逼近的值,累加对应商dvd-=temp;result+=multiple;}// 根据符号返回结果ifnegative{-(resultasi32)}else{resultasi32}}}

复杂度分析

指标 复杂度 说明
时间 O(log²N) 外层循环 O(log N) 次,内层倍增 O(log N) 次
空间 O(1) 仅使用常数个变量

关键点说明

  1. 为什么用i64

    i32::MIN的绝对值是2^31,超出i32::MAX (2^31-1),会溢出。转为i64后安全处理。

  2. 为什么temp << 1不会溢出?

    循环条件dvd >= (temp << 1)保证了temp始终不超过dvd,而dvd最大为|i32::MIN| = 2^31,在i64范围内完全安全。

  3. 位移与乘法的关系

    temp << 1等价于temp * 2multiple << 1等价于multiple * 2。题目禁止乘法,但允许位移(位运算),这是标准解法。

  4. 符号处理技巧

    (dividend > 0) != (divisor > 0)比分别判断四种情况更简洁:两数符号不同则为true(结果为负)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 8:11:12

基于SpringBoot的养老服务平台设计与实现(毕业设计项目源码+文档)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/9/4 8:26:03

美团算法策略岗春招笔试复盘:从题型拆解到备战思路

2026年春招的号角比往年吹得更早&#xff0c;我投的是美团算法策略岗&#xff0c;收到第一批笔试通知的时候愣了一下——距离我在官网提交简历才过去四天。当天晚上和几个同批进笔试的同学聊了聊&#xff0c;发现大家都有类似感受&#xff1a;算法岗的筛人逻辑变了&#xff0c;…

作者头像 李华
网站建设 2026/9/4 8:25:29

从宇树机器人争议看模型预测控制(MPC)实战:Python实现倒立摆平衡

最近在机器人圈子里&#xff0c;一个话题讨论得挺热闹&#xff1a;宇树科技&#xff08;Unitree&#xff09;的机器人新品发布后&#xff0c;市场反馈似乎没有预想中那么热烈&#xff0c;甚至有声音说它“丢掉了王座”。作为长期关注机器人开发与实战的技术博主&#xff0c;我觉…

作者头像 李华
网站建设 2026/9/3 19:51:55

HTTP中URL,状态码,HTTPS证书加密

bit::Shadow✧(≖ ◡ ≖✿ 目录 浏览器服务器模式&#xff08;B/S模式&#xff09; URL https://news.qq.com/rain/a/20260829A0D52600?adChannelIdnews分析其构成 从IP到域名的历程 幕后机制&#xff1a;DNS&#xff08;域名系统&#xff09;自动转换 URL实例 状态码 …

作者头像 李华
网站建设 2026/9/3 19:26:18

庐山派K230入门指南:从烧录到目标检测实战源码解析

简介&#xff1a;庐山派K230入门指南项目源码&#xff0c;面向AI视觉开发与嵌入式入门人群&#xff0c;基于嘉楠科技K230芯片&#xff0c;支持三路摄像头输入与Python编程&#xff0c;可应用于物联网、智能家居、工业自动化等场景&#xff1b;内容围绕快速上手展开&#xff0c;…

作者头像 李华
网站建设 2026/9/4 0:23:28

C语言嵌套结构体:从数据封装到工程实践的核心设计思想

你有没有遇到过这样的场景&#xff1a;一个学生信息管理系统&#xff0c;需要记录学生的基本信息&#xff0c;同时还要记录他的家庭住址。家庭住址本身又包含省、市、区、街道、门牌号等多个部分。在C语言里&#xff0c;你会怎么设计这个数据结构&#xff1f;新手可能会想到用一…

作者头像 李华