[题解][LeetCode][Divide Two Integers]
来源:互联网 发布:ic卡制作软件 编辑:程序博客网 时间:2024/05/18 00:15
题目:
Divide two integers without using multiplication, division and mod operator.
题解:
位运算
最简单的方法当然是直接 被除数减除数,直到为0. 这样太慢,会超时。
改进,被除数减去除数的幂次。
被除数 = 除数*2^a + 除数*2^b + ....
例如 47/7 = 7*2^2 + 7*2^1 + 5
答案就是2^2 + 2^1 = 6
那么我们就需要将divisor先左移至比dividend稍小的值,
然后dividend减去divisor(此时dividend比divisor小)
右移divisor(减小),直至比dividend小,
dividend减去divisor。
循环往复,直至dividend为0
其中,记录2的幂次的变量,需要和divisor共进退(同时左移/右移)
Code:
class Solution: # @return an integer def divide(self, dividend, divisor): if divisor == 1: return dividend if divisor == -1: return -dividend flag = True if divisor < 0: divisor = -divisor flag = not flag if dividend < 0: dividend = -dividend flag = not flag if divisor > dividend: return 0 ans = 0 i = 1 k = divisor while k+k < dividend : k = k << 1 i = i << 1 dividend -= k ans += i while dividend > 0: while k > dividend: k = k >> 1 i = i >> 1 dividend -= k ans += i if not flag: ans = -ans return ans
0 0
- LeetCode题解:Divide Two Integers
- [题解][LeetCode][Divide Two Integers]
- LeetCode题解:Divide Two Integers
- LeetCode题解——Divide Two Integers
- LeetCode 题解(177): Divide Two Integers
- leetcode题解-29. Divide Two Integers
- LeetCode: Divide Two Integers
- [LeetCode]Divide Two Integers
- LeetCode: Divide Two Integers
- [LeetCode] Divide Two Integers
- [Leetcode] Divide Two Integers
- LeetCode Divide Two Integers
- 【leetcode】Divide Two Integers
- [LeetCode]Divide Two Integers
- LeetCode-Divide Two Integers
- LeetCode: Divide Two Integers
- Divide Two Integers - leetcode
- Leetcode: Divide Two Integers
- uva 196(dfs)
- 驱动开发之 键盘过滤驱动一键盘输入流程
- poj 1177 Picture
- Libsvm for Matlab 安装过程和其中的一些问题
- 解析txt后放入list中,太初级了。。
- [题解][LeetCode][Divide Two Integers]
- Java6开发WebService入门
- 【Android开发】java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
- 关于JavaScript中的继承的一些理解
- MySQL Replication 主从同步原理及配置
- CentOS安装NodeJS及Express开发框架
- Final Exam Arrangement
- HDU 1231:最大连续子序列(DP)
- 图论~~!!!