leetcode29. 两数相除-medium

news/2025/3/18 21:45:18/

1 题目:两数相除

官方标定难度:中

给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。

整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。

返回被除数 dividend 除以除数 divisor 得到的 商 。

注意:假设我们的环境只能存储 32 位 有符号整数,其数值范围是 [−231, 231 − 1] 。本题中,如果商 严格大于 231 − 1 ,则返回 231 − 1 ;如果商 严格小于 -231 ,则返回 -231 。

示例 1:

输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = 3.33333… ,向零截断后得到 3 。

示例 2:

输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = -2.33333… ,向零截断后得到 -2 。

提示:

-231 <= dividend, divisor <= 231 - 1
divisor != 0

2 solution

这道题如果完全按照题目要求还是挺麻烦的,因为计算过程中很容易就溢出了,所以要额外增加很多判断。
总体思路,二分法:
1 用移位运算代替除以 2 的运算
2 要保证计算过程中溢出,而不是判断结果
3 注意不是所有的负数都能变成正数而不溢出

代码

class Solution {
public:
int divide(int a, int b, int c) { // a > b * c// a, b < 0,  c > 0while (c) {if (a > b) return 1; // a > b * c;if (c & 1) {a -= b;if (a > 0) return 1;}if (c > 1 && b < -(1 << 30)) return 1; // a > b + cb <<= 1;c >>= 1;}return a;
}int divide(int dividend, int divisor) {// 可能会溢出的情况if (dividend == INT32_MIN && divisor == -1) return INT32_MAX;if (divisor == 1) return dividend;// 先变成负数相除int symbol = 1;if (dividend > 0) {dividend = -dividend;symbol = -symbol;}if (divisor > 0) {divisor = -divisor;symbol = -symbol;}// 二分法int left = 0, right = INT32_MAX;while (left <= right) {int mid = left + ((right - left) >> 1); //  a > b * cint x = divide(dividend, divisor, mid);if (x == 0) return symbol * mid;else if (x > 0) right = mid - 1;else left = mid + 1;}return symbol * right;
}
};

结果

在这里插入图片描述


http://www.ppmy.cn/news/1580167.html

相关文章

创客匠人创始人IP变现大课将于3月在成都举办 助力知识付费转型

2025年3月15日至17日&#xff0c;由IP变现整体解决方案服务商创客匠人主办的“创始人IP变现大课”将在成都生物城凯悦嘉轩酒店举行。本次活动旨在为知识付费行业从业者提供系统化方法论与实战指导&#xff0c;解决创始人IP在流量获取、变现模式及同质化竞争中的核心痛点。 作为…

react(一):特点-基本使用-JSX语法

初识React React是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开发和维护。 官网文档&#xff1a;React 官方中文文档 特点 1.声明式编程 2.组件化开发 3.多平台适配 开发依赖 开发React必须依赖三个库&#xff1a; 1.react&#xff1a;包含react所必…

专题地图的立体表达-基于QGIS和PPT的“千层饼”视图制作实践

目录 前言 一、QGIS准备基础数据 1、QGIS 相关插件 2、图层标绘操作 二、PPT中制作 1、调整图片的规格 2、设置旋转 3、添加文字 三、总结 前言 在信息爆炸的时代&#xff0c;数据的可视化呈现变得愈发关键&#xff0c;而专题地图作为传递地理空间信息的有力工具&#…

问deepseek: 如何处理CGNS网格文件里,多个zone之间的链接数据

在CGNS文件中&#xff0c;多个zone之间的链接数据通常通过ZoneGridConnectivity节点处理。以下是处理步骤&#xff1a; 1. 确定链接类型 首先&#xff0c;明确zone之间的链接类型&#xff0c;常见的有&#xff1a; 1-to-1连接&#xff1a;两个zone的边界点一一对应。** Over…

计算机视觉——深入理解卷积神经网络与使用卷积神经网络创建图像分类算法

引言 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称 CNNs&#xff09;是一种深度学习架构&#xff0c;专门用于处理具有网格结构的数据&#xff0c;如图像、视频等。它们在计算机视觉领域取得了巨大成功&#xff0c;成为图像分类、目标检测、图像分…

RabbitMQ从入门到实战-知识详情总结

一、简介 RabbitMQ 是一个基于 AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c;高级消息队列协议&#xff09;的消息中间件&#xff0c;它用于异步通信、解耦系统&#xff0c;提高系统的可扩展性和可靠性。它广泛应用于微服务架构、分布式系统、异步处理等场景…

《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(49)万鸦壶焚网络 - 网络延迟时间(Bellman-Ford)

《灵珠觉醒:从零到算法金仙的C++修炼》卷三天劫试炼(49)万鸦壶焚网络 - 网络延迟时间(Bellman-Ford) 哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的万鸦壶网络,壶中网络错综复杂,节点之间的延迟各不相同。壶的入口处有一块巨大的石碑,上面刻着一行…

机器学习扫盲系列(2)- 深入浅出“反向传播”-1

系列文章目录 机器学习扫盲系列&#xff08;1&#xff09;- 序 机器学习扫盲系列&#xff08;2&#xff09;- 深入浅出“反向传播”-1 文章目录 前言一、神经网络的本质二、线性问题解析解的不可行性梯度下降与随机梯度下降链式法则 三、非线性问题激活函数 前言 反向传播(Ba…