首页 > 其他 > 详细

29. Divide Two Integers

时间:2016-03-08 00:29:22      阅读:128      评论:0      收藏:0      [点我收藏+]

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

AC代码:

class Solution(object):
    def divide(self, dividend, divisor):
        if divisor == 0: return -1
        is_positive, a, b = (dividend >= 0) ^ (divisor < 0), abs(dividend), abs(divisor)
        ret_num = 0
        while b <= a:
            c, d = b, 1
            while c <= a:
                ret_num += d; a -= c
                c, d = c << 1, d << 1
        return min(ret_num, 2147483647) if is_positive else max(-ret_num, -2147483648)

第一眼看,这题很简单嘛,不允许用除法和乘法,直接用被除数每次减一个除数,看一共能减多少个不就可以了。

本题Medium难度,用脚趾头想想也不可能这么简单。其实原题已经给出提示了,比如用MAX_INT除以1,要循环MAX_INT次,肯定是会超时的。

所以用类似于二分查找的思想,每次扣减的数翻倍,这样能快速迭代到达被除数的值。

注意到达临界点后需要继续重置因子继续迭代,所以是个二重循环。

29. Divide Two Integers

原文:http://www.cnblogs.com/zhuifengjingling/p/5252445.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!