python 刷leetcode题目(44)

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



猜你喜欢

转载自blog.csdn.net/annilingmo/article/details/80858796