LeetCode刷题记49
29. 两数相除
class Solution {
public int divide(int dividend, int divisor) {
if (divisor == Integer.MIN_VALUE) {
if(dividend == Integer.MIN_VALUE) return 1;
return 0;
}
int ans = 0;
if (dividend == Integer.MIN_VALUE) {
if (divisor == -1) return Integer.MAX_VALUE;
if (divisor == 1) return Integer.MIN_VALUE;
ans ++;
dividend += Math.abs(divisor);
}
int MAX_TMP = 1073741824;
int flag = 1;
if (dividend < 0 && divisor > 0 || dividend > 0 && divisor < 0) {
flag = -1;
}
int[] divisors = new int[32];
int[] nums = new int[32];
int cnt = 1;
divisor = Math.abs(divisor);
dividend = Math.abs(dividend);
divisors[0] = divisor;
nums[0] = 1;
for (int i = 1; i < 32; i ++) {
if (divisors[i - 1] >= MAX_TMP) break;
divisors[i] = divisors[i - 1] + divisors[i - 1];
nums[i] = nums[i - 1] + nums[i - 1];
cnt ++;
}
int i = cnt - 1;
while (dividend >= 0 && i >= 0) {
while (dividend >= divisors[i]) {
dividend -= divisors[i];
ans += nums[i];
}
i--;
}
if (flag == -1) ans = -ans;
return ans;
}
}
1/5
49/150