LeetCode 29 两数相除

Posted Starzkg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 29 两数相除相关的知识,希望对你有一定的参考价值。

https://leetcode-cn.com/problems/divide-two-integers/submissions/

解决方案

class Solution 
    public int divide(int dividend, int divisor) 
// 考虑被除数为最小值的情况
        if (dividend == Integer.MIN_VALUE) 
            if (divisor == 1) 
                return Integer.MIN_VALUE;
            
            if (divisor == -1) 
                return Integer.MAX_VALUE;
            
         // 考虑除数为最小值的情况
        if (divisor == Integer.MIN_VALUE) 
            return dividend == Integer.MIN_VALUE ? 1 : 0;
         // 考虑被除数为 0 的情况
        if (dividend == 0) 
            return 0;
        
        // 一般情况,使用类二分查找
        // 将所有的正数取相反数,这样就只需要考虑一种情况
        boolean rev = false;
        if (dividend > 0) 
            dividend = -dividend;
            rev = !rev;
        
        if (divisor > 0) 
            divisor = -divisor;
            rev = !rev;
        

        ans=0;
        solve(dividend,divisor,0);
        return rev ? -ans : ans;
    
    int ans = 0;

    public int solve(int dividend,int divisor,int candidate)
        int temp = divisor<<candidate;
        if(temp<dividend)
            return dividend;
        
        if(temp>=Integer.MIN_VALUE>>1)
            dividend = solve(dividend, divisor, candidate + 1);
        
        if(temp>=dividend)
            ans += 1 << candidate;
            dividend -= temp;
        
        return dividend;
    


以上是关于LeetCode 29 两数相除的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 29 两数相除

算法leetcode|29. 两数相除(rust重拳出击)

算法leetcode|29. 两数相除(rust重拳出击)

算法leetcode|29. 两数相除(rust重拳出击)

LeetCode29:两数相除

LeetCode 29 - 两数相除 - [位运算]