Leetcode29-两数相除

这篇博客介绍了如何使用倍增比大小的策略解决LeetCode第29题——两数相除。通过不断将除数翻倍并更新乘积,直到超过被除数,从而减少循环次数。博主详细解释了算法步骤,并提供了Python代码实现,确保结果在整数范围内且考虑了负数及溢出情况。
摘要由CSDN通过智能技术生成

Leetcode29-两数相除

在这里插入图片描述

思路:倍增比大小。

比如63/4:
步骤:
4+4=8 < 63 multiply =2 【2x4=8】
8+8=16<63 multiply =4【4x4=16】
16+16=32<63 multiply =8【8x4=32】 res = 8
32+32=64>63 新的dividend=63-32=31

再次循环:
4+4=8 < 31 multiply =2 【2x4=8】
8+8=16<31 multiply =4【4x4=16】res = 8 + 4 = 12
16+16=32>31 新的dividend=31-16=15

再次循环:
4+4=8 < 15 multiply =2 【2x4=8】res = 8 + 4 + 2 = 14
8+8=16>15 新的dividend=15-8=7

再次循环:
4+4=8 > 7 multiply =1 【1x4=4】res = 8 + 4 + 2 + 1 = 15
新的dividend=7-4=3

3<4, 退出循环。

class Solution:
    def divide(self, dividend: int, divisor: int) -> int:
        flag = 1
        if dividend < 0: 
            flag = -flag
            dividend = abs(dividend)
        if divisor < 0: 
            flag = -flag
            divisor = abs(divisor)
        res = 0
        while dividend >= divisor:
            cur = divisor
            multiple = 1
            while cur + cur < dividend:
                cur += cur
                multiple += multiple
            dividend -= cur #被除数
            res += multiple

        if flag == 1: 
            res = res
        else: 
            res = -res

        if res < -2147483648:  # 根据是否溢出返回结果
            return -2147483648
        elif 2147483647 <= res:
            return 2147483647
        else:
            return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值