#Leet Code# Divide Two Integers

描述:不使用 * / % 完成除法操作。O(n)复杂度会超时,需要O(lg(n))复杂度。

代码:

 1 class Solution:
 2     # @return an integer
 3     def dividePositive(self, dividend, divisor):
 4         if dividend < divisor:
 5             return 0
 6
 7         sum = divisor
 8         count = 1
 9         while sum + sum < dividend:
10             sum += sum
11             count += count
12
13         count += self.dividePositive(dividend - sum, divisor)
14
15         return count
16
17     def divide(self, dividend, divisor):
18         if dividend >= 0:
19             if divisor > 0:
20                 return self.dividePositive(dividend, divisor)
21             else:
22                 return 0 - self.dividePositive(dividend, 0 - divisor)
23         else:
24             if divisor > 0:
25                 return 0 - self.dividePositive(0 - dividend, divisor)
26             else:
27                 return self.dividePositive(0 - dividend, 0 - divisor)

#Leet Code# Divide Two Integers

时间: 2024-08-07 06:39:40

#Leet Code# Divide Two Integers的相关文章

[LeetCode] Divide Two Integers

In this problem, we are asked to divide two integers. However, we are not allowed to use division, multiplication and mod operations. So, what else can be use? Well, bit manipulations. Let's look at an example and see how bit manipulation might help.

Divide Two Integers leetcode

题目:Divide Two Integers Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 看讨论区大神的思路: In this problem, we are asked to divide two integers. However, we are not allowed to use division, multi

LeetCode: Divide Two Integers 解题报告

Divide Two Integers Divide two integers without using multiplication, division and mod operator. SOLUTION 11. 基本思想是不断地减掉除数,直到为0为止.但是这样会太慢. 2. 我们可以使用2分法来加速这个过程.不断对除数*2,直到它比被除数还大为止.加倍的同时,也记录下cnt,将被除数减掉加倍后的值,并且结果+cnt. 因为是2倍地加大,所以速度会很快,指数级的速度. 3. 另外要注意的是

#Leet Code# Evaluate Reverse Polish Notation

描述:计算逆波兰表达法的结果 Sample: ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6 使用stack实现: 1 def is_op

[lintcode medium]Divide Two Integers

Divide Two Integers Divide two integers without using multiplication, division and mod operator. If it is overflow, return 2147483647 Example Given dividend = 100 and divisor = 9, return 11. public class Solution { /** * @param dividend the dividend

#Leet Code# Gray Code

描述: 要求相邻数2进制差一位 先获得n-1的列表表示小于 2^(n-1) 的符合要求的列表,加上最高位的加成 2^(n-1) 就是大于等于 2^(n-1) 的符合要求的列表,后者翻转一下就能够与前者连接上了 代码: 1 class Solution: 2 # @return a list of integers 3 def grayCode(self, n): 4 if n == 0: return [0] 5 6 s1 = self.grayCode(n - 1) 7 s2 = [item

leetcode——Divide Two Integers 不用乘除取余操作求除法(AC)

Divide two integers without using multiplication, division and mod operator. 题目只有简单的一句话,看起来可真简单啊,呵呵,假象.这个题目的难点在于对时间效率的限制和边界值的测试.第一印象肯定是循环一个个把因子从被除数中减去不久行了么,可是对于比如INT_MAX/1或者INT_MIN/1之类的执行时间长的可怕,会超出时间限制.改善时间效率的思路是参考网上别人代码,将因子不断乘以2(可以通过移位实现,同时结果也从1开始不断

#Leet Code# Permutation

描述: 输出全排列 代码: 1 class Solution: 2 # @param num, a list of integer 3 # @return a list of lists of integers 4 def doSth(self, num): 5 result = self.permute(num[1:]) 6 for lst in result: 7 for i in range(len(lst) + 1): 8 yield lst[:i] + num[:1] + lst[i:

#Leet Code# Convert Sorted Array to Binary Search Tree

描述:递归 代码: 1 class Solution: 2 # @param num, a list of integers 3 # @return a tree node 4 def sortedArrayToBST(self, num): 5 if len(num) == 0: 6 return None 7 8 mid_index = len(num) / 2 9 10 tmp_tree = TreeNode(num[mid_index]) 11 tmp_tree.left = self.