博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
29. Divide Two Integers - Medium
阅读量:5846 次
发布时间:2019-06-18

本文共 1755 字,大约阅读时间需要 5 分钟。

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 = 3Output: 3

Example 2:

Input: dividend = 7, divisor = -3Output: -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);    }}

 

转载于:https://www.cnblogs.com/fatttcat/p/10135208.html

你可能感兴趣的文章
windows phone (12) 小试自定义样式
查看>>
Linux后台启动脚本
查看>>
jna dll c
查看>>
CentOS 升级现有PHP版本
查看>>
(一) pyhon 基础语法(数值 字符串 元组 列表 字典)
查看>>
springboot 学习笔记【1】开发第一个spring boot应用
查看>>
HDOJ 1003:求一串数字中和最大的连续子串
查看>>
RedHat 5.6_x86_64 + ASM + RAW+ Oracle 10g RAC (二)
查看>>
win7不能全屏
查看>>
MySQL/InnoDB的并发插入Concurrent Insert
查看>>
产品经理有话说——产品汪成长记(入职)
查看>>
2016/01
查看>>
从魔兽世界到激战2看MMO网游角色成长
查看>>
转两好文防丢:Debian 版本升级/降级 & Linux 应用程序失去输入焦点问题的解决...
查看>>
HDU - Pseudoforest
查看>>
Nexus杂
查看>>
Android --- GreenDao的实现(ORM框架)
查看>>
js_coding
查看>>
Linux平台Java调用so库-JNI使用例子
查看>>
PCM数据格式,多少字节算一帧
查看>>