【Leet-Code】29. 两数相除

    技术2026-06-12  7

     

     

    【题目解析】

    对【除数】进行倍增的方式,与【被除数】比较。

    举个例子:11 除以 3 。

    首先11比3大,结果至少是1;然后我让3翻倍,就是6,发现11比3翻倍后还要大,那么结果就至少是2;那我让这个6再翻倍,得12,11不比12大,退出此轮【倍增】,此轮得到【商】的结果为2。接下来让11减去刚才最后一次的结果6,剩下5,接下来我们计算5是3的多少倍。此时递归形式出现了,即重复1,2,3步骤。

     

    class Solution: def divide(self, dividend: int, divisor: int) -> int: # 前期的判断 if abs(dividend) < abs(divisor): return 0 sign = (dividend > 0) ^ (divisor > 0) dividend = abs(dividend) divisor = abs(divisor) # 核心部分 result = 0 tmp_result = 1 tmp_value = divisor tag = True while tag: while dividend >= tmp_value: if tmp_value + tmp_value < dividend: tmp_value += tmp_value tmp_result += tmp_result else: break dividend -= tmp_value result += tmp_result tmp_result = 1 tmp_value = divisor if dividend < tmp_value: tag = False # 对结果的特殊情况,特殊分析 result = -result if sign else result if result >= 2**31: return 2**31 - 1 elif result <= -2**31: return -2**31 return result

     

    Processed: 0.011, SQL: 9