码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode:Divide Two Integers

时间:2014-06-11 12:17:22      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:class   code      leetcode   时间   res   

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

其实刚开始看到这道题的时候,感觉应该是略简单。但真正开始写的时候发现了很多错误。

最开始的想法就是divisor一个一个加上去直到大于dividend为止,不过这样时间复杂度略高,是不会AC的。

后来的想法是每加一次,都把加数*2,这样可以较快得到收敛。得到的结果大于dividend的时候,把之前加的值减去,继续从divisor开始加。直到result和dividend的值相差小于divisor。

不过在过程中发现结点int边界的数值一直都在循环,跳不出来的原因是,我设置的类型都为int,有一些add或者result相加大于int的最大值后,得到的result和add都为负数了。这样循环改变就不会收敛了。

后来把所有的都改成long就对了。


public class Solution {
     public int divide(int dividend, int divisor) {
        if(divisor == 0) return divisor;
        //if(dividend<divisor) return 0;
        int syn = 1;
        if(dividend<0)
        {
            if(divisor>0)
            {
                syn = 0;
            }
        }
        if(divisor<0)
        {
            if(dividend>0)
            {
                syn = 0;
            }
        }
        //dividend = Math.abs(dividend);
        //divisor = Math.abs(divisor);
        long longDividend = Math.abs((long)dividend);
        long longDivisor = Math.abs((long)divisor);
        long i = 1;
        long result = 0;
        long add = divisor;
        long div = 0;
        while(longDividend-result>=longDivisor)
        {
            i = 1;
            add = longDivisor;
            while(result<longDividend)
            {
                result = result + add;
                div = div + i;
                i = i + i;
                add = add + add;
               
            }
            if(result == longDividend)
            {
                break;
            }
            else
            {
                result = result - add/2;
                div = div - i/2;
            }
        }
        if(syn == 0)
        {
            div = -div;
        }
        return (int)div;
       
    }
}

LeetCode:Divide Two Integers,布布扣,bubuko.com

LeetCode:Divide Two Integers

标签:class   code      leetcode   时间   res   

原文地址:http://www.cnblogs.com/jessiading/p/3772634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!