29. Divide Two Integers

siyang3的解答稍改进了一下。
思路是利用移位操作将一个数转化为2的幂的和的形式。
int范围-2^31 到2^31-1,都换成负数计算可以简化边界检查。

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++;
        //返回值也使用负数
        return divideNegatives(dividend-(divisor<<cur-1),divisor)-(1<<cur-1);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容