标签: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
标签:class code 类 leetcode 时间 res
原文地址:http://www.cnblogs.com/jessiading/p/3772634.html