lc29-两数相除
29.两数相除
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
示例 1:
输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = truncate(3.33333..) = truncate(3) = 3
示例 2:
输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = truncate(-2.33333..) = -2
提示:
被除数和除数均为 32 位有符号整数。
除数不为 0。
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/divide-two-integers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Solution
Corner Case
1.32位 int 范围 -2^31 ~ 2^31-1
将X Y 均变为 负数考虑 避免 2^31正数溢出
2.被除数 为 0 return 0
3.被除数 -2^31 除数为1 溢出 返回 2^31-1
4.除数为-2^31 被除数也为-2^31 返回 1 否则返回0
Main
快速幂(二分
X/Y=Z (X,Y均考虑负数)则有 Z*Y≥X>(Z+1)Y 成立 找到正数Z满足此公式即可
注意 本题不可使用 ‘’运算 因此用‘快速乘’ (加法实现)替代
迭代法 快速幂 对于除数 判断被除数是否大于除数 满足 继续判断 判断被除数是否大于除数的两倍
Code
1 |
|
- 本文作者:黄少豪
- 本文链接:http://example.com/2022/03/07/leetcode01/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!