【Leetcode】Divide Two Integers

来源:互联网 发布:广州unity3d招聘 编辑:程序博客网 时间:2024/06/15 17:00
Divide two integers without using multiplication, division and mod operator.If it is overflow, return MAX_INT.


简单解法:O(dividend/divisor)

public class Solution {    public int divide(int dividend, int divisor) {        int result = 0;        int negative = 1;        if(dividend < 0 && divisor > 0) {negative = -1; dividend = -dividend;}        if(dividend > 0 && divisor < 0) {negative = -1; divisor = -divisor;}        while(dividend >= 0){            dividend -= divisor;            result++;        }        result--;        return result*negative;    }}

位移算法:

public class Solution {    public int divide(int dividend, int divisor) {        if(divisor == 0) return Integer.MAX_VALUE;        if(divisor == -1 && dividend == Integer.MIN_VALUE) return Integer.MAX_VALUE;        if(dividend == divisor) return 1;        int result = 0;        int negative = 1;        long divid = (long) dividend;        long divis = (long) divisor;        if(dividend < 0) {divid = -divid;}        if(divisor < 0) {divis = -divis;}        if((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0)) negative = -1;        long newDivis = divis;        while(divid >= divis){            int i = 1;            while(newDivis <= divid){                newDivis = divis << i;                i++;            }            divid -= divis << (i - 2);            result += 1 << (i-2);            newDivis = divis;        }        return result*negative;    }}


0 0
原创粉丝点击