LeetCode29. Divide Two Integers(思路及python解法)

173 篇文章 0 订阅

Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator.

Return the quotient after dividing dividend by divisor.

The integer division should truncate toward zero.

Example 1:

Input: dividend = 10, divisor = 3
Output: 3

Example 2:

Input: dividend = 7, divisor = -3
Output: -2

不用乘除取余的操作符号,完成一个除法操作。

以往判断符号直接两数相乘判断,这里用 is 方法。然后将两数取绝对值。

然后就是一个不断减除数的一个过程,为了加速,每次将除数左移一位(相当于×2),然后类似于tcp中快恢复算法,重复这个过程。

最后要判断是否在[−2^31,  2^31 − 1]范围内。

class Solution:
    def divide(self, dividend: int, divisor: int) -> int:
        
        sym= (dividend<0) is (divisor<0)
        dividend, divisor = abs(dividend), abs(divisor)
        res=0
        
        while dividend>=divisor:
            index=1
            ndivisor=divisor
            while dividend>=ndivisor:
                dividend -= ndivisor
                res+=index
                index<<=1
                ndivisor<<=1
        
        if not sym:res=-res
        return max(min(res,2147483647),-2147483648)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值