LeetCode 29. Divide Two Integers
Solution1:
参考网址:[1]https://blog.youkuaiyun.com/qq_31617121/article/details/80458587
[2]http://www.cnblogs.com/grandyang/p/4431949.html
相当于复杂度优化到logN.
如 100 3
普通方法是 3 + 3 + 3 + 3 … + 3累加到100,数加了多少次
优化方法 3 6 12 24…
1 2 4 8… 看能累加多少次,超过的方法减去求得剩下的值,继续进行累加。
注意边界条件
class Solution {
public:
int divide(int dividend, int divisor) {
if (divisor == 0 || (dividend == INT_MIN && divisor == -1)) return INT_MAX;
long long m = abs((long long)dividend), n = abs((long long)divisor), res = 0;
int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
if (n == 1) return sign == 1 ? m : -m;
while (m >= n) {
long long t = n, p = 1;
while (m >= (t << 1)) {
t <<= 1;
p <<= 1;
}
res += p;
m -= t;
}
return sign == 1 ? res : -res;
}
};