Leetcode 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.
這個題的意思是在不使用乘除和取模運算的情況下進行除運算。
1)
class Solution {
public int divide(int dividend, int divisor) {
if(divisor == 0 || (dividend == Integer.MIN_VALUE && divisor == -1)){
return Integer.MAX_VALUE;
}
int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;//判斷兩個數中是否存在負數,存
在的話結果為false,不存在的話為true
long m = Math.abs((long)dividend);//直接對正整數進行運算
long n = Math.abs((long)divisor);
long res = 0;
if(n == 1){
return sign == -1 ? (int)m * -1 : (int)m;//標記正負號
}
while(m >= n){
long t = n,sum = 1;
while(m >= (t << 1)){//進行簡便計算
t <<= 1;
sum <<= 1;
}
res += sum;
m -= t;
}
return sign == -1 ? (int)res * -1 : (int)res;//最後的時候將符號加到原來的值上面。
}
}
2)
class Solution {
public int divide(int dividend, int divisor) {
long a = Math.abs((long)dividend);
long b = Math.abs((long)divisor);
long ret = 0;
while (a >= b) {
for (long tmp = b, cnt = 1; a >= tmp; tmp <<= 1, cnt <<= 1) {
ret += cnt;
a -= tmp;
}
}
ret = (((dividend ^ divisor) >> 31) & 1) == 1 ? -ret: ret;
if (ret > Integer.MAX_VALUE || ret < Integer.MIN_VALUE) {
return Integer.MAX_VALUE;
}
return (int)ret;
}
}
使用了位的表示法(32位)。
相關文章
- leetcode-29. Divide Two IntegersLeetCodeIDE
- [LeetCode] 29. Divide Two IntegersLeetCodeIDE
- leetcode29_Divide Two IntegersLeetCodeIDE
- LeetCode T29 Divide Two IntegersLeetCodeIDE
- Leetcode Divide Two IntegersLeetCodeIDE
- Leetcode-Divide Two IntegersLeetCodeIDE
- Divide Two Integers leetcode javaIDELeetCodeJava
- Divide Two IntegersIDE
- 演算法練習--LeetCode--29. Divide Two Integers: 100%演算法LeetCodeIDE
- [LeetCode] Divide Two Integers 兩數相除LeetCodeIDE
- 【leetcode】29. Divide Two Integers 不能使用乘除法的整數除法LeetCodeIDE
- LeetCode Problem-Sum of Two IntegersLeetCode
- leetcode 371. Sum of Two IntegersLeetCode
- Divide Two Integers不使用乘除法來計算兩個數相除IDE
- 371. Sum of Two Integers--LeetCode RecordLeetCode
- A - Yet Another Two Integers Problem ACMACM
- [LeetCode] 3226. Number of Bit Changes to Make Two Integers EqualLeetCode
- Leetcode Two SumLeetCode
- Leetcode Power of TwoLeetCode
- Leetcode 1 two sumLeetCode
- Leetcode-Two SumLeetCode
- Two Sum leetcode javaLeetCodeJava
- LeetCode | 1 Two SumLeetCode
- LeetCode-29LeetCode
- [LeetCode]1.Two SumLeetCode
- LeetCode----1. Two SumLeetCode
- LeetCode 1.Two NumsLeetCode
- LeetCode1:Two SumLeetCode
- Leetcode Add Two NumbersLeetCode
- [LeetCode]1. Two SumLeetCode
- LeetCode OJ : 1 Two SumLeetCode
- LeetCode-1 Two SumLeetCode
- LeetCode | 349 Intersection Of Two ArraysLeetCode
- [LeetCode] 2491. Divide Players Into Teams of Equal SkillLeetCodeIDE
- LeetCode 2 Add Two NumbersLeetCode
- LeetCode: Two sum(兩數之和)LeetCode
- Leetcode 231 Power of TwoLeetCode
- python: leetcode - 1 Two SumPythonLeetCode