Leetcode -- 29. Divide Two Integers
2017-04-21 09:46
453 查看
题目:Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
思路:不用乘法,除法和取模运算实现两个数的除法。注意考虑边界,如果
divisor = -1, dividend = INT_MIN这时候会产生溢出,直接返回
INT_MAX。
如果每次用
dividend减去
divisor,会超时,因为如果
divisor = ±1,时间复杂度为
O(dividend)。
优化算法是每次把除数翻倍,这样可以大大减少时间复杂度。
C++代码如下:
int divide(int dividend, int divisor) { if(divisor == -1) { if(dividend == INT_MIN) return INT_MAX; else return -dividend; } long long ret = 0; int sign = 0; if((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0)) sign = 1; long long x = dividend >= 0 ? dividend : -(long long)dividend; long long y = divisor >= 0 ? divisor : -(long long)divisor; while(x>=y) { long long z = y; for(int i = 0; x >= z; i++, z <<= 1) { x -= z; ret += (1 << i); } } if(sign) return ret; else return -ret; }
相关文章推荐
- leetcode--29. Divide Two Integers
- leetcode29:Divide Two Integers
- LeetCode 29. Divide Two Integers 二进制分解
- [leetcode 29]divide two integers
- LeetCode_OJ【29】Divide Two Integers
- LeetCode 29 Divide Two Integers(两个整数相除)(*)
- Java [leetcode 29]Divide Two Integers
- LeetCode-29.Divide Two Integers
- [leetcode 29] Divide Two Integers
- leetcode 29. Divide Two Integers
- leetcode 29 Divide Two Integers
- leetcode 29:Divide Two Integers
- leetcode 29. Divide Two Integers
- 个人记录-LeetCode 29. Divide Two Integers
- Leetcode——29. Divide Two Integers
- [leetcode] 29. Divide Two Integers 解题报告
- LeetCode --- 29. Divide Two Integers
- leetcode29 Divide Two Integers
- leetcode题解-29. Divide Two Integers
- leetcode 29:Divide Two Integers