LeetCode刷题笔记(模拟):divide-two-integers
2018-02-02 20:06
393 查看
转载请注明作者和出处:http://blog.csdn.net/u011475210
代码地址:https://github.com/WordZzzz/Note/tree/master/LeetCode
刷题平台:https://www.nowcoder.com/ta/leetcode
题 库:Leetcode经典编程题
编 者:WordZzzz
题目描述
解题思路
C版代码实现
不用乘法,除法和取模运算符来计算两个整数相除的结果。
首先是15-3=12,然后让我们尝试去减去更多。3左移一位得6,15-6=9。6左移一位是12,15-12=3。当我们再次对12进行左移得到24时,已经比15大了,所以15最多可以减去12。12是3的四倍,那么我们怎么得到这个4呢?其实我们可以在3(cur)左移的时候,对1(multiple)进行同样的左移操作即可,这样,当cur成为12的时候,multiple正好是4。
接下来,把15-12剩下的3再次进行循环,得出multiple为1,所以最后得到4+1=5次。
根据问题陈述,我们需要处理一些例外,例如溢出。
那么有两种情况可能会导致溢出:
divisor = 0;
dividend = INT_MIN和divisor = -1(因为abs(INT_MIN) = INT_MAX + 1)。
当然,我们也需要考虑相对容易的标志。
系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~
完的汪(∪。∪)。。。zzz
代码地址:https://github.com/WordZzzz/Note/tree/master/LeetCode
刷题平台:https://www.nowcoder.com/ta/leetcode
题 库:Leetcode经典编程题
编 者:WordZzzz
题目描述
解题思路
C版代码实现
题目描述
Divide two integers without using multiplication, division and mod operator.不用乘法,除法和取模运算符来计算两个整数相除的结果。
解题思路
假设我们要划分15和3,所以15是dividend、3是divisor。那么划分只需要我们找出可以从dividend中减去多少次divisor,而不会造成dividend负面影响。首先是15-3=12,然后让我们尝试去减去更多。3左移一位得6,15-6=9。6左移一位是12,15-12=3。当我们再次对12进行左移得到24时,已经比15大了,所以15最多可以减去12。12是3的四倍,那么我们怎么得到这个4呢?其实我们可以在3(cur)左移的时候,对1(multiple)进行同样的左移操作即可,这样,当cur成为12的时候,multiple正好是4。
接下来,把15-12剩下的3再次进行循环,得出multiple为1,所以最后得到4+1=5次。
根据问题陈述,我们需要处理一些例外,例如溢出。
那么有两种情况可能会导致溢出:
divisor = 0;
dividend = INT_MIN和divisor = -1(因为abs(INT_MIN) = INT_MAX + 1)。
当然,我们也需要考虑相对容易的标志。
C++版代码实现
class Solution { public: int divide(int dividend, int divisor) { if(!divisor || dividend == INT_MIN && divisor == -1) return INT_MAX; long long dvd = labs(dividend); long long dvs = labs(divisor); int res = 0; while(dvd >= dvs){ long long cur = dvs, multiple = 1; while(dvd >= cur << 1){ cur <<= 1; multiple <<= 1; } dvd -= cur; res += multiple; } return ((dividend < 0) ^ (divisor < 0)) ? -res : res; } };
系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~
完的汪(∪。∪)。。。zzz
相关文章推荐
- Leetcode笔记(7)Divide Two Integers
- leetcode笔记:Divide Two Integers
- 【leetcode刷题笔记】Divide Two Integers
- leetcode---divide-two-integers---模拟
- Leetcode 29 :Divide two integers
- [leetcode]29. Divide Two Integers
- LeetCode: Divide Two Integers
- [LeetCode-Java]29. Divide Two Integers
- [LeetCode]Divide Two Integers
- [Leetcode 87] 29 Divide Two Integers
- LeetCode - 29. Divide Two Integers
- leetcode -- Divide Two Integers
- leetcode ——29——Divide Two Integers
- 【LeetCode-面试算法经典-Java实现】【029-Divide Two Integers(两个整数相除)】
- LeetCode 29. Divide Two Integers
- Leetcode之Divide Two Integers
- leetcode面试准备:Divide Two Integers
- leetcode[29]Divide Two Integers
- leetcode——Divide Two Integers
- [LeetCode] Divide Two Integers