这题,分类是二分。确实第一时间相出了二分做法,结果是超时的。。。
看了题解,看完实现的时候唉,边界真的不好控制,一言难尽。
先记录一下,明天补思路。
class Solution {
public:
int divide(int dividend, int divisor) {
if(divisor == 0) return 0;
bool sign = (dividend<0) ^ (divisor<0);//1负,0正
if(dividend==-2147483648 && divisor == -1) return -(dividend+1);
long long d1, d2;
if(dividend < 0) d1 = 0ll-dividend;
else d1 = dividend;
if(divisor < 0) d2 = 0ll-divisor;
else d2 = divisor;
long long ans = 0;
while(d2<=d1){
long long base = d2;
long long num = 0;
while(d1 >= base){
base <<= 1;
num ++;
}
num--;
ans += (1<<num);
d1 = d1 - (long long)(base>>1);
}
if(sign) return 0ll-ans;
else return ans;
}
};`