leetcode: 29. Divide Two Integers

Difficulty

Medium

Description

Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator.

Return the quotient after dividing dividend by divisor.

The integer division should truncate toward zero.

Example 1:

Input: dividend = 10, divisor = 3
Output: 3
Example 2:

Input: dividend = 7, divisor = -3
Output: -2

Solution

Time Complexity: O(log(n))
Space Complexity: O(1)

class Solution {
    public int divide(int dividend, int divisor) {
        int sign = 1;
		if ((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0))
			sign = -1;
		long ldividend = Math.abs((long) dividend);
		long ldivisor = Math.abs((long) divisor);

		if (ldividend == 0 || ldividend < ldivisor) return 0;
		
		int ans;
		long div = ldivide(ldividend, ldivisor);

		if (div > Integer.MAX_VALUE)
			ans = (sign == 1) ? Integer.MAX_VALUE : Integer.MIN_VALUE;
		else
			ans = (int) (sign * div);
		
		return ans;
    }

	public long ldivide(long dividend, long divisor) {
		if (dividend < divisor) return 0;
		
		long sum = divisor;
		long mul = 1;

		while ((sum + sum) <= dividend)   //二分查找
		{
			sum += sum;
			mul += mul;
		}
		return mul + ldivide(dividend - sum, divisor);
	}
}

猜你喜欢

转载自blog.csdn.net/baidu_25104885/article/details/87696916