博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】592. Fraction Addition and Subtraction
阅读量:6242 次
发布时间:2019-06-22

本文共 1706 字,大约阅读时间需要 5 分钟。

题目如下:

解题思路:本题考察的是分数的加减法。小学时候就学过,分数的加减法是先求两个分母的最小公倍数,然后分子分别乘以最小公倍数与自己分母的商,相加后约分即可。所以,本题只要按+,-两个符号分割输入字符串,就可以得到所有的分数列表,做加减操作即可。考虑到第一个分数是负数的情况,我在代码中加入了一个判断,如果表达式第一个字符是负数,给表达式加上'0/1'的前缀,既不影响结果,又简化了代码。

代码如下:

class Solution(object):    def fractionAddition(self, expression):        """        :type expression: str        :rtype: str        """        def gcd(a, b):            if a % b == 0:                return b            else:                return gcd(b, a % b)        def lcm(a,b):            return  a * b / gcd(a,b)        if expression[0] == '-':            expression = '0/1' + expression        expression += '#'        operators = ['+','-']        operator = ''        next = ''        res = ''        for i in expression:            if i in operators or i == '#':                if operator == '':                    operator = i                    res = next                    next = ''                else:                    fl = res.split('/')                    sl = next.split('/')                    denominator = lcm(int(fl[1]),int(sl[1]))                    if operator == '+':                        numerator = int(fl[0]) *  denominator/int(fl[1])  + int(sl[0]) *  denominator/int(sl[1])                    else:                        numerator = int(fl[0]) * denominator / int(fl[1]) - int(sl[0]) * denominator / int(sl[1])                    res = str(numerator) + '/' + str(denominator)                    next = ''                    operator = i            else:                next += i        rl = res.split('/')        g = gcd(int(rl[0]),int(rl[1]))        res = str(int(rl[0])/g) + '/' +  str(int(rl[1])/g)        return res

 

转载于:https://www.cnblogs.com/seyjs/p/9633314.html

你可能感兴趣的文章
[20150529]用户与用户组管理
查看>>
baidu__git_android
查看>>
ZC_源码编译真机烧写_20160424
查看>>
day26-UDP协议无粘包问题
查看>>
使用HTML5的十大原因
查看>>
转发:修饰符
查看>>
【转载】Linux下configure命令详细介绍
查看>>
图片中转站
查看>>
DSP c6678的启动方式
查看>>
【Linux】解决Android Stadio报错:error in opening zip file
查看>>
功能(一):添加影像服务图层
查看>>
选择伊始
查看>>
PHP中继承
查看>>
总结各种容器特点
查看>>
SQL Server高级查询
查看>>
13-Flutter移动电商实战-ADBanner组件的编写
查看>>
ubuntu 16.04 启用root用户方法
查看>>
阿里巴巴矢量图标库
查看>>
南阳理工904
查看>>
1. Two Sum
查看>>