就是因为负数的范围更广,所以涉及到正负数的运算应该往负数这方面转;不要按照正常的逻辑走;还有正序比顺序快的前提是:正序实现的就是逆序的逻辑,但是不是的时候,可能迭代更快一些;想特殊的0,1,是一定要想到的;题目:Divide two integers without using multiplication, division and mod operator.If it is overflow, return MAX_INT.想想中的正序的超时的方法:
class Solution {
public int divide(int dividend, int divisor) {
int ret = 0;
int sigin=1;//全变成负数
if(dividend == 0){
return ret;
}
if(dividend<0 && divisor>0){
sigin = -1;
divisor = -divisor;
}
if(dividend>0 && divisor<0){
sigin = -1;
dividend = -dividend;
}
if(dividend>0 && divisor>0){
divisor = -divisor;
dividend = -dividend;
}
if(divisor == -1){
if(sigin == -1){
return dividend;
}else{
if(dividend == Integer.MIN_VALUE)
dividend++;
return 0-dividend;
}
}
if(divisor dividend){
count = ret;
if(temp>dividend-temp){
temp = temp + temp;
ret =ret + ret;
}else{
if(temp == dividend-temp){
temp = temp + temp;
ret =ret + ret;
break;
}else{
for(int i=1;i<=count;i++){
if(temp == dividend - divisor){
ret = ret+i;
break;
}else{
if(temp < dividend -divisor){
ret = ret+i-1;
break;
}
}
temp = temp + divisor ;
}
}
break;
}
}
if(sigin == -1){
return 0- ret;
}
return ret;
}
}
使用迭代不超时的办法:
class Solution {
public int divide(int dividend, int divisor) {
int ret = 0;
int sigin=1;//全变成负数
if(dividend == 0){
return ret;
}
if(dividend<0 && divisor>0){
sigin = -1;
divisor = -divisor;
}
if(dividend>0 && divisor<0){
sigin = -1;
dividend = -dividend;
}
if(dividend>0 && divisor>0){
divisor = -divisor;
dividend = -dividend;
}
if(divisor == -1){
if(sigin == -1){
return dividend;
}else{
if(dividend == Integer.MIN_VALUE)
dividend++;
return 0-dividend;
}
}
if(divisor dividend){
if(temp>dividend-temp){
temp = temp + temp;
ret =ret + ret;
}else{
if(temp == dividend-temp){
temp = temp + temp;
ret =ret + ret;
break;
}else{
ret=ret+divide(dividend-temp,divisor);
break;
}
}
}
if(sigin == -1){
return 0- ret;
}
return ret;
}
}
恩,其实做过类似的题,总是忘,再记录一次。