热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[LeetCode]题解(python):029-DivideTwoIntegers

题目来源:https:leetcode.comproblemsdivide-two-integers题意分析:不用乘法,除法和mod运算来实现一个除法。如果数值

题目来源:

  https://leetcode.com/problems/divide-two-integers/


 

题意分析:

  不用乘法,除法和mod运算来实现一个除法。如果数值超过了int类型那么返回int的最大值。


 

题目思路:

  初步来说,有两个做法。

  ①模拟除法的过程,从高位开始除,不够先右挪一位。这种方法首先要将每一位的数字都先拿出来,由于最大int类型,所以输入的长度不超过12位。接下来就是模拟除法的过程。

  ②利用左移操作来实现出发过程。将一个数左移等于将一个数×2,取一个tmp = divisor,所以将除数tmp不断左移,直到其大于被除数dividend,然后得到dividend - tmp,重复这个过程。


 

代码(python):

 1 class Solution(object):
 2     def divide(self, dividend, divisor):
 3         """
 4         :type dividend: int
 5         :type divisor: int
 6         :rtype: int
 7         """
 8         ispositive = True
 9         if dividend > 0 and divisor < 0:
10             ispositive = False
11         if dividend <0 and divisor > 0:
12             ispositive = False
13         dividend = abs(dividend);divisor = abs(divisor)
14         if dividend < divisor:
15             return 0
16         num = [1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000]
17         i = 9
18         newdividend = []
19         while i >= 0:
20             tmp = 0
21             while dividend >= num[i]:
22                 tmp += 1;dividend -= num[i]
23             newdividend.append(tmp); i -= 1
24         tmpm = 0; ans = 0 ;i = 0
25         while i <10:
26             while tmpm < divisor:
27                 if i > 9:
28                     break
29                 j = 0; t = 0
30                 while j <10 and tmpm != 0:
31                     t += tmpm; j += 1
32                 tmpm = t + newdividend[i]; i += 1
33                 if tmpm < divisor:
34                     j = 0; t = 0
35                     while j <10 and ans != 0:
36                         t += ans; j += 1
37                     ans = t
38             if tmpm >= divisor:
39                 k = 0
40                 while tmpm >= divisor:
41                     tmpm -= divisor; k += 1
42                 j = 0; t = 0
43                 while j <10 and ans != 0:
44                     t += ans; j += 1
45                 ans = t + k
46         if ispositive:
47             if ans > 2147483647:
48                 return 2147483647
49             return ans
50         if ans >= 2147483648:
51             return -2147483648
52         return 0 - ans
53                 
模拟过程
 1 class Solution(object):
 2     def divide(self, dividend, divisor):
 3         """
 4         :type dividend: int
 5         :type divisor: int
 6         :rtype: int
 7         """
 8         ispositive = True
 9         if dividend > 0 and divisor < 0:
10             ispositive = False
11         if dividend <0 and divisor > 0:
12             ispositive = False
13         dividend = abs(dividend);divisor = abs(divisor)
14         if dividend < divisor:
15             return 0
16         tmp = divisor
17         ans = 1
18         while dividend >= tmp:
19             tmp <<= 1
20             if tmp > dividend:
21                 break
22             ans <<= 1
23         tmp >>= 1
24         nans = ans + self.divide(dividend - tmp,divisor)
25         if ispositive:
26             if ans > 2147483647:
27                 return 2147483647
28             return nans
29         if ans >= 2147483648:
30             return -2147483648
31         return 0 - nans
32                 
左移

 


 

转载请注明出处:http://www.cnblogs.com/chruny/p/4893254.html


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动调整列的宽度functionDBGridRecordSize(mColumn:TColumnEh):Boolean;{返回记录数据网格列显示最大宽度是否成功}beginResu ... [详细]
author-avatar
love糸_603
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有