题目https://leetcode-cn.com/problems/xoh6Oh/
class Solution {
public int divide(int a, int b) {
if(a == Integer.MIN_VALUE && b == -1) {
return Integer.MAX_VALUE;
}
int sign = (a > 0) ^ (b > 0) ? -1 : 1;
a = Math.abs(a);
b = Math.abs(b);
int res = 0;
for (int i = 31; i >= 0; i--) {
if ((a >>> i) - b >= 0) {
a -= (b << i);
res += (1 << i);
}
}
return sign > 0 ? res : -res;
}
}
时间复杂度:O(1);空间复杂度:O(1)。
【思路】
- 整体思路:将整数除法转换成整数的减法,依据整除的定义(C++中是向零取整)考察a至多能减去多少个b,为了提高效率可以考虑减去b的倍数;
- 符号判