29. 两数相除
给定两个整数,被除数 dividend
和除数 divisor
。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend
除以除数 divisor
得到的商。
示例 1:
输入: dividend = 10, divisor = 3 输出: 3
示例 2:
输入: dividend = 7, divisor = -3 输出: -2
说明:
- 被除数和除数均为 32 位有符号整数。
- 除数不为 0。
- 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
class Solution:
def divide(self, dividend, divisor):
"""
:type dividend: int
:type divisor: int
:rtype: int
"""
### the first method
# positive = (dividend < 0) is (divisor < 0)
# dividend, divisor = abs(dividend), abs(divisor)
# res = 0
# # 检查dividend是否大于divisor
# # 如果还小于则进行小精度的逼近dividend
# while dividend >= divisor:
# temp, i = divisor, 1
# while dividend >= temp:
# # 增大逼近dividend的步伐
# # i不断增加, temp不断减少
# dividend -= temp
# res += i
# # 倍数相应的要增加
# i = i << 1
# temp = temp << 1
# # 判定正负号
# if not positive:
# res = -res
# return min(max(-2**31, res), 2**31 -1)
### the second method
res = abs(dividend) // abs(divisor)
if (dividend < 0 and divisor > 0) or (dividend > 0 and divisor < 0 ):
res *= -1
if res < -2**31 or res > (2**31 -1):
return 2**31 -1
return res
166. 分数到小数
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。
如果小数部分为循环小数,则将循环的部分括在括号内。
示例 1:
输入: numerator = 1, denominator = 2 输出: "0.5"
示例 2:
输入: numerator = 2, denominator = 1 输出: "2"
示例 3:
输入: numerator = 2, denominator = 3 输出: "0.(6)"
代码:很遗憾,这个题目没有通过,主要卡在一个环节,就是插入“(”这个下标的定位,有大神路过可以教一下嘛。
class Solution:
def fractionToDecimal(self, numerator, denominator):
"""
:type numerator: int
:type denominator: int
:rtype: str
"""
decimal = ""
if numerator == 0:
return "0"
if denominator == 0:
return decimal
num = abs(numerator)
den = abs(denominator)
restMap = {}
if num % den == 0:
decimal = str(num // den)
else:
decimal = str(num // den) + "."
index = len(decimal)
rest = num % den
while(rest != 0 and rest not in restMap):
restMap[rest] = index + 1
rest *= 10
decimal += str(rest // den)
# print(decimal)
rest = rest % den
if (rest != 0) :
list_decimal = list(decimal)
n_pos = list_decimal.index(str(rest // den))
print(n_pos)
list_decimal.insert(2, '(') ##### 怎么才能定位到无限循环的小数的位置呢?
list_decimal.append(")")
decimal = "".join(list_decimal)
if (numerator < 0 and denominator < 0) or (numerator > 0 and denominator > 0):
return decimal
else:
return "-" + decimal