LeetCode (29)Divide Two Integers
2017-05-15 20:34
381 查看
(29)Divide Two Integers
题目:不用除法计算一个数与另一个数的商。另外:当结果溢出int范围的时候,输出int范围最大的数字。
例如:
输入:dividend:-10;divisor:-1; 输出:10。 输入:dividend:-2147483648;divisor:1; 输出:-2147483648。
本来题目还是挺简单的,但是就这个int范围搞得有点烦。
除法就是减法的简单方法,然而如果直接使用减法做多次删减的工作,会导致TLE,所以使用位运算的方法,可以将除数每次做2的倍数的运算,每次减去这个数,就可以算出商是多少了。这样就从O(n)的算法变成O(logn)的算法,减少不少时间。
下面是代码:
class Solution { public: int divide(int dividend, int divisor) { if(dividend == 0 || divisor == 0){ return 0; } unsigned int dividend_abs = abs(dividend), divisor_abs = abs(divisor); int flag = (dividend < 0) ^ (divisor < 0); int len = 0; while(divisor_abs < dividend_abs){ divisor_abs = divisor_abs << 1; len ++; } unsigned int temp = divisor_abs; temp = temp >> 1; divisor_abs = divisor_abs >> len; len --; if(len == -1){ return (divisor_abs > dividend_abs)?(0):(flag==0?1:(0-1)); } dividend_abs -= temp; int result = 1 << len; while(len >= 0){ if(temp <= dividend_abs){ dividend_abs -= temp; result += 1 << len; } else{ len --; temp = temp >> 1; } } if(result < -2147483647 || result > 2147483647){ return flag==0?2147483647:-2147483648; } return flag==0?(result):(0-result); } };
相关文章推荐
- leetcode29 Divide Two Integers
- [leetcode: Python]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 @python
- 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(binary search)
- leetcode 29.Divide Two Integers
- 【leetcode】29. Divide Two Integers
- leetcode 29:Divide Two Integers
- 【LeetCode】29. Divide Two Integers