leetCode 29.Divide Two Integers (两整数相除) 解题思路和方法

原创 2015年07月07日 23:26:53

Divide Two Integers 


Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.


思路:这个题算法上不是很难,但是通过率相当低,只有15%,果然,自己在写完之后,各种出错,而且错误不是算法上的错误,是各种边界值没有考虑到,很多溢出错误等。下面是具体代码,有详细注释。

public class Solution {
    public int divide(int dividend, int divisor) {
        long a = dividend;
        long b = divisor;
        if(b == 0 || (a == Integer.MIN_VALUE && b == -1)){//如果被除数为0或溢出
            return Integer.MAX_VALUE;
        }
        boolean isNegative = false;//是否负数
        //将负数转成正数
        if(a < 0 && b > 0){
            isNegative = true;
            a = -a;
        }else if(a > 0 && b < 0){
            isNegative = true;
            b = -b;
        }else if(a < 0 && b < 0){
            a = -a;
            b = -b;
        }
        if(b == 1){
        	return (int) (isNegative?-a:a);
        }
        //如果被除数大,返回0
        if(a < b){
            return 0;
        }
        divisor = (int) b;//如果是负,将转变为正数
        int step = 1;
        while(b < a){//如果b<a,则b = b*2
            step <<= 1;//右移一位,相当于乘于2
            b <<= 1;//b = b*2
        }
        if(b == a){//如果相等,直接返回
            return  isNegative? -step : step;//判断是否为负数
        }
        dividend = (int) (a - (b >> 1));
        step >>= 1;
        int num = step + divide(dividend,divisor);//递归调用
        return isNegative?-num:num;//返回结果,并判断正负
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

Leetcode解题思路总结(Easy)

近来走上了Leetcode刷题之路,不过刷题背后更重要的是思路,掌握了方法,举一反三融会贯通。故在此我总结每道题的解题思路,按照题目从简单到难的顺序来列举。 292 Nim Game,传说中的一行...
  • luoshengkim
  • luoshengkim
  • 2015年12月17日 17:12
  • 2927

leetcode解题思路

转载地址:http://blog.csdn.net/liuxialong/article/details/41941407 收录https://oj.leetcode.com/problem...
  • zr459927180
  • zr459927180
  • 2016年07月26日 09:37
  • 552

leetcode 1: 找出两个数相加等于给定数 two sum

问题描述对于一个给定的数组,找出2个数,它们满足2个数的和等于一个特定的数,返回这两个数的索引。(从1开始) Given an array of integers, find two numbers...
  • quzhongxin
  • quzhongxin
  • 2015年04月24日 11:08
  • 1499

leetcode 刷题题解(c++) 1.Two Sum (hash表,排序+二分查找)

c++刷leetcode,有题目和算法代码,可直接在leetcode提交通过。
  • GOGO_YAO
  • GOGO_YAO
  • 2016年07月24日 20:59
  • 546

Java实现两个整数相除

public class DeleTwoNum { public static void main(String[] args){ int a = 7; int b = 300; ...
  • fso918
  • fso918
  • 2014年02月13日 13:34
  • 1348

leetcode解题总结(持续更新)

树型:DFS或BFS(不够+状态存储,缩短时间)(如数位DP,就是DFS+状态存储) 链表:多用two pointer 无序数组:hash映射(O(1),map,set等),并查集,字典树tire 有...
  • ChinaJane163
  • ChinaJane163
  • 2016年09月21日 20:53
  • 595

Decode Ways 把字符串解码成数字组合@LeetCode

做这道题还是有很多收获的: 1.为了避免麻烦,开数组时可以开大一些,如int[] ways = new int[len+10]; 2. 这道题实际上是和计算要几步走完台阶的那道题本质是一样的。同样要用...
  • hellobinfeng
  • hellobinfeng
  • 2013年11月24日 05:05
  • 2737

LintCode_两个整数相除

笔试面试算法题
  • Tina_yaoyao
  • Tina_yaoyao
  • 2015年11月27日 15:55
  • 904

Divide Two Integers不使用乘除法来计算两个数相除

题目描述 分析 不使用乘除法来计算两个数相除,那就从除法的定义出发:商表示的是被除数里包含了多少个除数。那最直接的一种办法,就是循环减除数,累加次数,直到不能再减。这么粗暴的办法,很容易会超时,举个...
  • DoWhatIWant_comeon
  • DoWhatIWant_comeon
  • 2017年06月04日 19:22
  • 115

[LeetCode-29] Divide Two Integers(两个整数相除,不用乘除取余算术符)

Divide two integers without using multiplication, division and mod operator.If it is overflow, retur...
  • xy010902100449
  • xy010902100449
  • 2015年09月15日 19:01
  • 917
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetCode 29.Divide Two Integers (两整数相除) 解题思路和方法
举报原因:
原因补充:

(最多只允许输入30个字)