【leetcode系列】【py3】【中等】两数相除

题目:

原题链接: https://leetcode-cn.com/problems/divide-two-integers/

 

解题思路:

根据除数(a)和被除数(b)的正负号,判断最终结果的正负

然后使用除数和被除数的绝对值进行计算

 

计算的时候,当b > a时,对a进行自加的操作,即a = a + a,第一次相当于×2,第二次×4,直到b < a + a的时候,更新b = b - a, a = 原始值

重复此步骤,直到b < 原始a,退出循环

除此之外,再加一个是否溢出int最大值的判断

如果溢出,则返回int最大值

 

代码实现:

class Solution:
    def divide(self, dividend: int, divisor: int) -> int:
        int_range = [2 ** 31 - 1, 2 ** 31]
        sign = 0
        if dividend < 0 and divisor > 0:
            sign = 1
        elif dividend > 0 and divisor < 0:
            sign = 1
        elif dividend == 0 or divisor == 0:
            return 0

        a, b = abs(dividend), abs(divisor)
        res = 0
        def get_div(a, b):    
            if a < b:
                return 0
        
            tb = b
            tmp_res = 1
            while a >= tb + tb:
                tmp_res = tmp_res << 1
                tb = tb << 1
                
            return tmp_res + get_div(a - tb, b)

        res = get_div(a, b)
        if res > int_range[sign]: res = int_range[sign]
        if sign == 1: res = 0 - res
        return res

发布了50 篇原创文章 · 获赞 0 · 访问量 517
App 阅读领勋章
微信扫码 下载APP
阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览