29.两数相除
两数相除
给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。
整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8,-2.7335 将被截断为 -2。
返回被除数 dividend 除以除数 divisor 得到的 商。
注意:假设我们的环境只能存储 32 位 有符号整数,其数值范围是 $[−2^{31}, 2^{31} − 1]$。本题中,如果商 严格大于 $2^{31} − 1$,则返回 $2^{31} − 1$;如果商 严格小于 $-2^{31}$,则返回 $-2^{31}$。
示例 1:
输入:dividend = 10, divisor = 3
输出:3
解释:10/3 = 3.33333.. ,向零截断后得到 3。
示例 2:
输入:dividend = 7, divisor = -3
输出:-2
解释:7/-3 = -2.33333.. ,向零截断后得到 -2。
提示:
- $-2^{31}$ <= dividend, divisor <= $2^{31} - 1$
- divisor != 0
解析
利用倍增思想:每次将除数翻倍(左移),快速逼近被除数,从而减少减法次数。
1 | |
倍增法的核心思想:不断将除数翻倍来加速减法过程。时间复杂度 O(log²n)。
29.两数相除
https://leetcode.lz5z.com/29.divide-two-integers/