將siyang3的解答稍改進(jìn)了一下昆汹。
思路是利用移位操作將一個(gè)數(shù)轉(zhuǎn)化為2的冪的和的形式唇辨。
int范圍-2^31 到2^31-1秧均,都換成負(fù)數(shù)計(jì)算可以簡(jiǎn)化邊界檢查驯妄。
class Solution {
public int divide(int dividend, int divisor) {
if(dividend==Integer.MIN_VALUE&&divisor==-1)return Integer.MAX_VALUE;
if(dividend>0&&divisor>0){
return -divideNegatives(-dividend, -divisor);
}else if(dividend>0){
return divideNegatives(-dividend, divisor);
}else if(divisor>0){
return divideNegatives(dividend, -divisor);
}else{
return -divideNegatives(dividend, divisor);
}
}
private int divideNegatives(int dividend,int divisor){
if(divisor<dividend)return 0;
int cur = 1;
while(divisor<<cur>=dividend&&divisor<<cur<divisor)cur++;
//返回值也使用負(fù)數(shù)
return divideNegatives(dividend-(divisor<<cur-1),divisor)-(1<<cur-1);
}
}