剑指offer面试题15(剑指OfferII001.整数除法)

给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 '*'、除号 '/' 以及求余符号 '%' ,今天小编就来说说关于剑指offer面试题15?下面更多详细答案一起来看看吧!

剑指offer面试题15(剑指OfferII001.整数除法)

剑指offer面试题15

题目

给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 '*'、除号 '/' 以及求余符号 '%' 。

注意:整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231−1]。本题中,如果除法结果溢出,则返回 231 − 1

示例 1:输入:a = 15, b = 2 输出:7

解释:15/2 = truncate(7.5) = 7

示例 2:输入:a = 7, b = -3 输出:-2

解释:7/-3 = truncate(-2.33333..) = -2

示例 3:输入:a = 0, b = 1 输出:0

示例 4:输入:a = 1, b = 1 输出:1

提示:-231 <= a, b <= 231 - 1

b != 0

注意:本题与主站 29 题相同

解题思路分析

1、遍历;时间复杂度O(log(n)),空间复杂度O(1)

func divide(a int, b int) int { if b == 0 || a == 0 { return 0 } if b == 1 { return a } flag, count := 1, 1 if a < 0 { flag = -flag a = -a } if b < 0 { flag = -flag b = -b } x, y, z := a, b, 0 temp := y for x-y >= 0 { for x-y >= 0 { x = x - y z = z count y = y y count = count count } y = temp count = 1 } if z > math.MaxInt32 { return math.MaxInt32 } if flag < 0 { return -z } return z }

2、计算;时间复杂度O(1),空间复杂度O(1)

func divide(a int, b int) int { res := a / b if res > math.MaxInt32 { return math.MaxInt32 } return res }

总结

Easy题目,题目同leetcode 29.两数相除

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页