Divide Two Integers
解题思路:
https://leetcode.com/problems/divide-two-integers/#/description
题目:
解题思路:
这道题需要考虑corner case:dividend如果是0,直接返回0;如果divisor是0,那就看dividend是正数还是负数;然后还有当dividend是负无穷,divisor是-1的时候,要返回正无穷。然后就是要用bit操作来进行shift,每次更新rst。

代码:
https://leetcode.com/problems/divide-two-integers/#/description
题目:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
解题思路:
这道题需要考虑corner case:dividend如果是0,直接返回0;如果divisor是0,那就看dividend是正数还是负数;然后还有当dividend是负无穷,divisor是-1的时候,要返回正无穷。然后就是要用bit操作来进行shift,每次更新rst。

代码:
public int divide(int dividend, int divisor) { if(dividend == 0){ return 0; } if(divisor == 0){ return dividend > 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE; } if(dividend == Integer.MIN_VALUE && divisor == -1){ return Integer.MAX_VALUE; } boolean isNegative = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0); long a = Math.abs((long)dividend), b = Math.abs((long)divisor); int rst = 0; while(a >= b){ int shift = 0; while(a >= (b << shift)){ shift++; } a -= (b << (shift - 1)); rst += (1 << (shift - 1)); } return isNegative ? -rst : rst; }

Comments
Post a Comment