[LeetCode]题解(python):029-Divide Two Integers
2015-10-19 22:06
731 查看
[b]题目来源:[/b]
https://leetcode.com/problems/divide-two-integers/
[b]题意分析:[/b]
不用乘法,除法和mod运算来实现一个除法。如果数值超过了int类型那么返回int的最大值。
[b]题目思路:[/b]
初步来说,有两个做法。
①模拟除法的过程,从高位开始除,不够先右挪一位。这种方法首先要将每一位的数字都先拿出来,由于最大int类型,所以输入的长度不超过12位。接下来就是模拟除法的过程。
②利用左移操作来实现出发过程。将一个数左移等于将一个数×2,取一个tmp = divisor,所以将除数tmp不断左移,直到其大于被除数dividend,然后得到dividend - tmp,重复这个过程。
[b]代码(python):[/b]
左移
转载请注明出处:http://www.cnblogs.com/chruny/p/4893254.html
https://leetcode.com/problems/divide-two-integers/
[b]题意分析:[/b]
不用乘法,除法和mod运算来实现一个除法。如果数值超过了int类型那么返回int的最大值。
[b]题目思路:[/b]
初步来说,有两个做法。
①模拟除法的过程,从高位开始除,不够先右挪一位。这种方法首先要将每一位的数字都先拿出来,由于最大int类型,所以输入的长度不超过12位。接下来就是模拟除法的过程。
②利用左移操作来实现出发过程。将一个数左移等于将一个数×2,取一个tmp = divisor,所以将除数tmp不断左移,直到其大于被除数dividend,然后得到dividend - tmp,重复这个过程。
[b]代码(python):[/b]
class Solution(object): def divide(self, dividend, divisor): """ :type dividend: int :type divisor: int :rtype: int """ ispositive = True if dividend > 0 and divisor < 0: ispositive = False if dividend < 0 and divisor > 0: ispositive = False dividend = abs(dividend);divisor = abs(divisor) if dividend < divisor: return 0 tmp = divisor ans = 1 while dividend >= tmp: tmp <<= 1 if tmp > dividend: break ans <<= 1 tmp >>= 1 nans = ans + self.divide(dividend - tmp,divisor) if ispositive: if ans > 2147483647: return 2147483647 return nans if ans >= 2147483648: return -2147483648 return 0 - nans
左移
转载请注明出处:http://www.cnblogs.com/chruny/p/4893254.html
相关文章推荐
- 12.Python标准库_数学与随机数 (math包,random包)
- Python学习笔记 -- 第五章
- [LeetCode]题解(python):028-Implement strStr()
- Python爬虫入门-Beautiful Soup的用法
- python文件操作之文件读取方式
- python 字符串函数
- 解决python源代码中编码问题
- Python学习要点(0x00)
- python 获取星期几
- python 判断学期与学年
- Python下ORM的一个设计举例
- Python2.x与3.x版本区别
- python 去除不可见的控制字符
- 源码安装python
- Python下异步IO和协程简介
- Python中assert的用法
- python+Eclipse+pydev环境搭建
- python排序算法和实现
- Python技巧——list与字符串互相转换
- 定位 python image not found问题