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
- LeetCode T29 Divide Two IntegersLeetCodeIDE
- 演算法練習--LeetCode--29. Divide Two Integers: 100%演算法LeetCodeIDE
- 【leetcode】29. Divide Two Integers 不能使用乘除法的整數除法LeetCodeIDE
- leetcode 371. Sum of Two IntegersLeetCode
- [LeetCode] 3226. Number of Bit Changes to Make Two Integers EqualLeetCode
- A - Yet Another Two Integers Problem ACMACM
- Leetcode 231 Power of TwoLeetCode
- Leetcode 1 two sumLeetCode
- LeetCode | 1 Two SumLeetCode
- [LeetCode] 2491. Divide Players Into Teams of Equal SkillLeetCodeIDE
- [LeetCode] 2406. Divide Intervals Into Minimum Number of GroupsLeetCodeIDE
- LeetCode-29LeetCode
- LeetCode 2 Add Two NumbersLeetCode
- LeetCode-1 Two SumLeetCode
- [LeetCode]1.Two SumLeetCode
- LeetCode | 349 Intersection Of Two ArraysLeetCode
- Leetcode 231. Power of TwoLeetCode
- python: leetcode - 1 Two SumPythonLeetCode
- LeetCode-2 Add Two NumbersLeetCode
- Leetcode 21 Merge Two Sorted ListsLeetCode
- LeetCode: Two sum(兩數之和)LeetCode
- Leetcode 4 Median of Two Sorted ArraysLeetCode
- LeetCode 2. Add Two NumbersLeetCode
- 【Leetcode】1029. Two City SchedulingLeetCode
- LeetCode 21. Merge Two Sorted ListsLeetCode
- LeetCode 4. Median of Two Sorted ArraysLeetCode
- LeetCode #1:Two Sum(簡單題)LeetCode
- LeetCode Two Sum(001)解法總結LeetCode
- leetcode 350. Intersection of Two Arrays IILeetCode
- 【LeetCode】617. Merge Two Binary TreesLeetCode
- Leetcode 160. Intersection of Two Linked ListsLeetCode
- LeetCode 617. Merge Two Binary TreesLeetCode
- LeetCode 29——兩數相除LeetCode
- python leetcode 之兩數之和(two sum)PythonLeetCode
- [LeetCode] 884. Uncommon Words from Two SentencesLeetCode
- [LeetCode] 3090. Maximum Length Substring With Two OccurrencesLeetCode