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
  • 相关阅读:
    webmagic使用
    网站文件下载链接
    正则表达式
    JS 页面刷新或重载
    History
    【问题&解决】fonts/fontawesome-webfont.woff2 404 (Not Found)
    ckeditor的使用
    Windows Server 2012 R2 或 2016 无法安装 .Net 3.5.1
    自定义配置文件的读取
    MVC中上传文件大小限制的解决办法
  • 原文地址:https://www.cnblogs.com/19991201xiao/p/8486295.html
Copyright © 2011-2022 走看看