#29 Divide Two Integers

Description

Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator.
Return the quotient after dividing dividend by divisor.
The integer division should truncate toward zero.

Note
Both dividend and divisor will be 32-bit signed integers.
The divisor will never be 0.
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 231 − 1 when the division result overflows.

Example

Example 1:

Input: dividend = 10, divisor = 3
Output: 3

Example 2:

Input: dividend = 7, divisor = -3
Output: -2

解题思路

题目规定

  • 不让用 × 和 ÷
  • overflow的时候用Integer.Max_Value和Integer.Min_Value代替

先把特殊可能性揪出来

  • Min_Value ÷ (-1) = Max_Value
  • Min_Value ÷ Min_Value = 1
  • Anything ÷ Min_Value = 0

然后就不停的减减减减减,和小学生算除法一样一样dei

class Solution {
    public int divide(int dividend, int divisor) {
        int answer = 0;
        int flag = -1;
        if(dividend <= 0 && divisor < 0 || dividend >= 0 && divisor > 0)
            flag = 1;
        if(divisor == -2147483648 && dividend == -2147483648)
            return 1;
        if(divisor == -2147483648)
            return 0;
        if(dividend == -2147483648){
            answer += flag;
            if(flag > 0)
                dividend -= divisor;
            else
                dividend += divisor;
        }
        if(dividend == 2147483647){
            answer += flag;
            if(flag > 0)
                dividend -= divisor;
            else
                dividend += divisor;
        }
        while(Math.abs(dividend) >= Math.abs(divisor)){
            if(answer == 2147483647)
                break;
            answer += flag;
            if(flag > 0)
                dividend -= divisor;
            else
                dividend += divisor;
        }
        return answer;
    }
}

摸了下submission里面速度快的……
用的位操作……不太明白Orz(位操作不是只能乘除2?
研究完了再更新!

猜你喜欢

转载自blog.csdn.net/YY_Tina/article/details/86760144
今日推荐