zoukankan      html  css  js  c++  java
  • 44.leetcode29_divide_two_integers

    1.题目描述

    Divide two integers without using multiplication, division and mod operator.

    If it is overflow, return MAX_INT.

    不使用乘除法的情况下作除法,溢出的话返回MAX-INT。

    2.题目分析

    这个题的整体AC率说明除法其实也不是那么容易的。

    3.解题思路

    一开始是直接循环做减法,这么草率的做法不出所料的超时了。于是在里面嵌套了一个循环使除数成倍增加,来节省时间。

     1 class Solution(object):
     2     def divide(self, dividend, divisor):
     3         """
     4         :type dividend: int
     5         :type divisor: int
     6         :rtype: int
     7         """
     8         result=0
     9         o1=o2=1 #决定最后结果的正负号
    10         n=1
    11         MAX_INT=2147483647
    12         MIN_INT=-2147483648
    13         if dividend<0:  #假定两个数都是正的
    14             dividend=-dividend
    15             o1=-1
    16         if divisor<0:
    17             divisor=-divisor
    18             o2=-1
    19         #if divisor==0:  
    20             #return MAX_INT
    21         while dividend>=divisor: 
    22             temp=divisor  #temp=divisor*2**(N-1)
    23             while dividend-temp>=0: 
    24                 dividend-=temp
    25                 result+=n 
    26                 temp+=temp #temp加倍
    27                 n+=n #n加倍
    28                 continue
    29             n=1 #dividend未除尽,再次循环
    30             continue
    31         if o1==o2: #判断result符号
    32             if result>MAX_INT: #判断是否溢出
    33                 return MAX_INT
    34             return result
    35         else:
    36             if result<MIN_INT:
    37                 return MIN_INT
    38             return -result
  • 相关阅读:
    Transformer详解
    PAT 1012
    PAT 1011
    PAT 1010
    Jordan Lecture Note-3: 梯度投影法
    PAT 1009
    PAT 1008
    Jordan Lecture Note-2: Maximal Margin Classifier
    PAT 1007
    PAT 1006
  • 原文地址:https://www.cnblogs.com/19991201xiao/p/8486295.html
Copyright © 2011-2022 走看看