[Leetcode] Divide Two Integers
Divide two integers without using multiplication, division and mod operator.(在不使用乘法,除法和取余操作的情况下实现整数的除法运算。)
If it is overflow, return MAX_INT.
解题思路
最简单的方法就是用被除数一直减去除数,知道差小于除数,则循环次数等于商,最后的差为余数,这个算法时间复杂度为O(n)的。除了这个方法,还可以使用移位运算。
例如 f(32,5)=32/5=20/5+10/5+2/5=4+2+0=6
5左移2位就是20,而左移3位就是40超过了32,因此第一部分商为2*2=4.
对余数12再进行分析,左移2位是20,超过了12,则第二部分的商为2*1=2.
对余数2再进行分析,发现5不需要移位就比2大,因此第二部分商为0.
加和可得,商为6,余数为2
该题还需要注意边界值的处理,除数为0时,结果为int最大值,当被除数为最小int值且除数为-1时,结果为int最大值。
同时符号的处理也需要注意。
1 | class Solution(object): |