[刷题] LeetCode刷题-Math-Python (2)

67. Add Binary

代码:

class Solution:
    def addBinary(self, a: 'str', b: 'str') -> 'str':
        return '{:b}'.format(int(a,2) + int(b,2))

思路:
利用 python 本身自带的 int 转换函数与字符串格式化即可。
参考资料:Python3 字符串格式化

结果:
67. Add Binary
43. Multiply Strings

代码:

class Solution:
    def multiply(self, num1: 'str', num2: 'str') -> 'str':
        num_1 = 0
        num_2 = 0
        for i in num1:
            num_1 = num_1 * 10 + (ord(i)-ord('0'))
        for i in num2:
            num_2 = num_2 * 10 + (ord(i)-ord('0'))
        return str(num_1*num_2)

思路:
题目里指出不能使用任何内置的二进制库或是直接将输入转为整数,那就用循环进行转化就好了。

结果:
43. Multiply Strings
29. Divide Two Integers

代码:

class Solution:
    def divide(self, dividend: 'int', divisor: 'int') -> 'int':
        dividend_, divisor_ = abs(dividend), abs(divisor)
        quotient = 0
        while dividend_ >= divisor_:
            temp, i = divisor_, 1
            while dividend_ >= temp:
                dividend_ -= temp
                temp += temp
                quotient += i
                i += i
        if dividend*divisor < 0:
            quotient = -quotient
        return min(max(quotient, -pow(2,31)),pow(2,31)-1)

思路:
最开始我的思路就是不断循环将 dividend 减去 divisor,直到 dividend 小于或等于0。不过,这样有个弊端:处理时间太长,遇到除数为1而被除数很大的情况就会 TLE 了。
看了他人的思路,一下就想明白了:还是不断循环相减,不过由原先的一层循环变为两层循环,外循环用于控制何时停止相减,即除法结束,内循环用于在满足条件的情况下,不断使‘除数’翻倍,以缩短除法执行时间。

结果:
29. Divide Two Integers
69. Sqrt(x)

代码:

class Solution:
    def mySqrt(self, x: 'int') -> 'int':
        left, right = 1, x
        while 1:
            middle = int((left+right)/2)
            if middle * middle <= x and (middle+1) * (middle+1) > x:
                return middle
            elif middle * middle > x:
                right = middle
            else:
                left = middle

思路:
比较简单,看代码即可。

结果:
69. Sqrt(x)
50. Pow(x, n)

代码:

class Solution:
    def myPow(self, x: 'float', n: 'int') -> 'float':
        res = 1
        x_ = x
        n_ = (bin(n)[2:])[::-1]
        for i in n_:
            if i=='1':
                res*=x_
            x_*=x_
        if n < 0:
            return 1/res
        return res

思路:
利用快速幂的思想即可。

结果:
50. Pow(x, n)

如果你看到了这篇文章的最后,并且觉得有帮助的话,麻烦你花几秒钟时间点个赞,或者受累在评论中指出我的错误。谢谢!

作者信息:
LeetCode:Tao Pu
CSDN:Code_Mart
Github:Bojack-want-drink

你可能感兴趣的:(LeetCode,LeetCode,刷题日记)