leetcode之Divide Two Integers

一开始以为这道题很简单了,不让用乘除余数,可以循环用加法,但是超时了之后才注意到限制。就得模拟人进行除法的运算。代码如下:

class Solution(object):
    def divide(self, dividend, divisor):
        """
        :type dividend: int
        :type divisor: int
        :rtype: int
        """
        import re
        def di(dividend, divisor, x):
            if x == 0:                
                n = 0
                while dividend >= divisor:
                    n = n + 1
                    dividend = dividend - divisor
                return n
            if x == 1:
                while dividend >= divisor:
                    dividend = dividend - divisor
                return dividend

        def div(dividend, divisor):
            if divisor == 0:
                return -1
            if dividend == 0:
                return 0
            if len(str(dividend)) < len(str(divisor)):
                return 0
            if len(str(divisor)) == 1:
                s = ''
                n = 0
                str1 = str(dividend)            
                for i in range(len(str1)):
                    z = int(str1[i]) + n
                    m = di(z, divisor, 0)
                    n = di(z, divisor, 1) * 10
                    s = s + str(m)                
                a = re.sub('0+', '', s)            
                if a == '':                
                    return 0
                else:               
                    return int(s.lstrip('0'))
            else:
                #从跟被除数相同位数的开始除
                s = ''
                str2 = str(dividend)[:len(str(divisor)) - 1]
                n = int(str2) * 10
                str1 = str(dividend)[len(str(divisor)) - 1:]
                for i in range(len(str1)):                
                    z = int(str1[i]) + n
                    m = di(z, divisor, 0)
                    n = di(z, divisor, 1) * 10
                    s = s + str(m)                
                a = re.sub('0+', '', s)
                
                if a == '':                
                    return 0
                else:               
                    return int(s.lstrip('0'))

        if dividend < 0:
            if divisor > 0:
                if -div(-dividend, divisor) < -2147483648:
                    return -2147483648
                else:
                    return -div(-dividend, divisor)
            else:
                if div(-dividend, -divisor) > 2147483647:
                    return 2147483647
                else:
                    return div(-dividend, -divisor)
        elif dividend > 0:
            if divisor < 0:
                if -div(dividend, -divisor) < -2147483648:
                    return -2147483648
                else:
                    return -div(dividend, -divisor)
            else:            
                if div(dividend, divisor) > 2147483647:
                    return 2147483647
                else:               
                    return div(dividend, divisor)
        else:
          
            return div(dividend,divisor)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值