Java for LeetCode 029 Divide Two Integers

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

If it is overflow, return MAX_INT.

解题思路:

既然不呢个用乘除和取模运算,只好采用移位运算,可以通过设置一个length代表divisor向左的做大移位数,直到大于dividend,然后对length做一个循环递减,dividend如果大于divisor即进行减法运算,同时result加上对应的值,注意边界条件,JAVA实现如下:

static public int divide(int dividend, int divisor) {
		if (divisor == 0)
			return Integer.MAX_VALUE;
		boolean isNeg = dividend < 0;
		if (divisor < 0)
			isNeg = !isNeg;
		int length = 0;
		long longdividend = Math.abs((long) dividend);
		long longdivisor = Math.abs((long) divisor), result = 0;
		while (longdividend >= longdivisor) {
			longdivisor = longdivisor << 1;
			length++;
		}
		while (length >= 0) {
			if (longdividend >= longdivisor) {
				result += Math.pow(2, length);
				longdividend -= longdivisor;
			}
			longdivisor = longdivisor >> 1;
			length--;
		}
		if (result > Integer.MAX_VALUE && !isNeg)
			result = (long) Integer.MAX_VALUE;
		return isNeg ? -(int) result : (int) result;
	}
时间: 2024-08-29 07:05:14

Java for LeetCode 029 Divide Two Integers的相关文章

[LeetCode] 029. Divide Two Integers (Medium) (C++/Python)

索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 029. Divide Two Integers (Medium) 链接: 题目:https://oj.leetcode.com/problems/divide-two-integers/ 代码(github):https://github.com/illuz/leetcode 题意: 实现除法,不能用乘.除和取模

LeetCode 029 Divide Two Integers

题目要求:Divide Two Integers Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 分析: 不能用乘.除和取余,则只能用减了…… 代码如下: class Solution { public: int divide(int dividend, int divisor) { // 当 dividend = INT

LeetCode --- 29. Divide Two Integers

题目链接:Divide Two Integers Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 这道题的要求是在不使用乘法.除法.取模运算的前提下实现两个整数相除.如果溢出,返回MAX_INT. 这道题的直接思路是用被除数不断减去除数,直到为0.这种方法的迭代次数是结果的大小,即比如结果为n,算法复杂度是O(n). 可以

LeetCode 28 Divide Two Integers

Divide two integers without using multiplication, division and mod operator. 思路:1.先将被除数和除数转化为long的非负数,注意一定要为long,因为Integer.MIN_VALUE的绝对值超出了Integer的范围. 2.常理:任何正整数num都可以表示为num=2^a+2^b+2^c+...+2^n,故可以采用2^a+2^b+2^c+...+2^n来表示商,即dividend=divisor*(2^a+2^b+

029 Divide Two Integers

029 Divide Two Integers class Solution: # @param {integer} dividend # @param {integer} divisor # @return {integer} def divide(self, dividend, divisor): intMax, intMin = 2147483647, -2147483648 if dividend==0 or divisor == 0: return 0 isNeg = (dividen

LeetCode 29 Divide Two Integers (C,C++,Java,Python)

Problem: Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. Solution: 不能乘除就加减就行了,但是一个问题是加减有可能速度太慢,因此需要转换,由于任何一个数都能表示成二进制,所以有dividend=divisor*(a*2^1 + b*2^2 + ...... + m*2^k) 所以只要计算出所有diviso

Java [leetcode 29]Divide Two Integers

题目描述: Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 解题思路: 把除数表示为:dividend = 2^i * divisor + 2^(i-1) * divisor + ... + 2^0 * divisor.这样一来,我们所求的商就是各系数之和了,而每个系数都可以通过移位操作获得. 详细解说请参考:http:/

【leetcode】Divide Two Integers

题目: Divide two integers without using multiplication, division and mod operator. 解析:不使用乘号.除号和余号实现两个整数的除法.该题可以利用移位操作数求解,主要分为三个步骤: (1)先求两个int类型整数的绝对值,注意要将int类型转化成long类型才能求绝对值:因为int类型的范围是-2147483648~2147483647,如果某个数为-2147483648,其绝对值会溢出. (2)对被除数a和除数b进行移位

leetcode之Divide Two Integers

Divide Two Integers Divide two integers without using multiplication, division and mod operator. 分析:不用乘.除.模运算实现除法.由于每个整数都可以写成an*2^n + --+a0*2^0的形式,所以可以使用移位来求商,首先是递归算法,此算法在leetcode上超时,不过理解起来比较简单,思路也是正确的. class Solution { public: int __div(int x,int y)