zoukankan      html  css  js  c++  java
  • 29. Divide Two Integers

    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.

    Example 1:

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

    Example 2:

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

    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.

    只能用加减来实现除法-> recutsion。主要考虑以下几种情况:

    1. 溢出 -> 用long

    2. 被除数为0 或者 被除数小于除数 -> 返回0

    3. 符号问题

    time: O(logn), space: O(logn)

    class Solution {
        public int divide(int dividend, int divisor) {
            int sign = 1;
            if((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0)) sign = -1;
            
            long longdividend = Math.abs((long)dividend);
            long longdivisor = Math.abs((long)divisor);
            if(longdividend == 0 || longdividend < longdivisor) return 0;
            
            long longres = helper(longdividend, longdivisor);
            
            int res = (int)longres;
            if(longres > Integer.MAX_VALUE) {
                res = sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            return sign * res;
        }
        public long helper(long dividend, long divisor) {
            if(dividend < divisor) return 0;
            long sum = divisor;
            long multiple = 1;
            while(sum + sum <= dividend) {
                sum += sum;
                multiple += multiple;
            }
            return multiple + helper(dividend - sum, divisor);
        }
    }
  • 相关阅读:
    swiper 增加一个鼠标移入分页器的小点后就切换展示图片
    css中的单冒号和双冒号 以及 伪类和伪元素
    pointer-events: none;元素永远不会成为鼠标事件的target
    jQuery off() 方法
    jQuery方法汇总
    vue 数组修改 页面无法刷新
    mysql error Code 1441:datetime function: datetime field overflow
    生命的意义
    删除镜像或容器
    nginx Redis 不能访问问题
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10135208.html
Copyright © 2011-2022 走看看