首页 > 代码库 > [leetcode] 29. divide two integers
[leetcode] 29. divide two integers
这道题目一直不会做,因为要考虑的corner case 太多。
1. divisor equals 0.
2. dividend equals 0.
3. Is the result negative?
4. when dividend equals Integer.MIN_VALUE and divisor equals -1, the result will overflow. convert result to long and then to integer.
5. have to use divided by divisor * 2 ^ n to avoid exceeding time limit
6. have to convert divisor and dividend to long to avoid overflow in shift.
7. constant 1 in java is compiled as integer by default.
public class Solution { public int divide(int dividend, int divisor) { if (divisor == 0) { return dividend >= 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE; } if (dividend == 0) { return 0; } boolean isNegative = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0); long x = Math.abs((long)dividend); long y = Math.abs((long)divisor); long result = 0; while (x >= y) { int a = 0; while (x >= (y << a)) { a++; } a--; result += (long)1 << a; x -= y << a; } if (result == (long) Integer.MAX_VALUE + 1) { return isNegative ? Integer.MIN_VALUE : Integer.MAX_VALUE; } return isNegative ? -(int)result : (int)result; } }
[leetcode] 29. divide two integers
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。