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