美文网首页
29. Divide Two Integers

29. Divide Two Integers

作者: wtmxx | 来源:发表于2018-02-10 18:36 被阅读0次

    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);
        }
    }
    

    相关文章

      网友评论

          本文标题:29. Divide Two Integers

          本文链接:https://www.haomeiwen.com/subject/hukhtftx.html