继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

29. 两数相除

海绵宝宝撒
关注TA
已关注
手记 417
粉丝 40
获赞 124

29. 两数相除

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

返回被除数 dividend 除以除数 divisor 得到的商。

示例 1:

输入: dividend = 10, divisor = 3

输出: 3

示例 2:

输入: dividend = 7, divisor = -3

输出: -2

说明:

被除数和除数均为 32 位有符号整数。

除数不为 0。

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。

解题思路:

        如果按照常规的 循环减去 除数 divisor 会产生时间溢出, 换个思路每相减一次 除数 divisor 就 加上自己 第二次相减 就变成 - 2*divisor 第三次就变成 - 3*divisor 当最后一次 相减的余数 小于 n*divisor,再开始一个新循环 从 n*divisor ~ 0,查找 相减余数 的 值

代码:

class Solution:

    def divide(self, dividend, divisor):

        """

        :type dividend: int

        :type divisor: int

        :rtype: int

        """

        min = (2**31)

        isActive = True

        if (divisor<0 and dividend>0) or (divisor>0 and dividend<0):

            isActive = False

        dividend = abs(dividend)

        divisor = abs(divisor)

        i = 0

        j = 1

        divisor_j = divisor

        result = dividend

        while result >= divisor_j:

            result = result-divisor_j

            divisor_j += divisor

            i+=j

            j+=1

        while result >= divisor:

            result = result-divisor

            divisor_j += divisor

            i+=1

        if not isActive:

            i = -i

        if i < -min:

            return i-1

        if i > min-1:

            return i-1

        return i


webp



作者:不爱去冒险的少年y
链接:https://www.jianshu.com/p/f41448fd58b0


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP