29. Divide Two Integers

siyang3的解答稍改進了一下。
思路是利用移位操作將一個數(shù)轉化為2的冪的和的形式。
int范圍-2^31 到2^31-1,都換成負數(shù)計算可以簡化邊界檢查。

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++;
        //返回值也使用負數(shù)
        return divideNegatives(dividend-(divisor<<cur-1),divisor)-(1<<cur-1);
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容