题目

给定一个表示分数加减运算的字符串 expression ,你需要返回一个字符串形式的计算结果。

这个结果应该是不可约分的分数,即最简分数。 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。所以在上述例子中, 2 应该被转换为 2/1。

示例 1:

输入: expression = “-1/2+1/2”
输出: “0/1”
示例 2:

输入: expression = “-1/2+1/2+1/3”
输出: “1/3”
示例 3:

输入: expression = “1/3-1/2”
输出: “-1/6”

提示:

输入和输出字符串只包含 ‘0’ 到 ‘9’ 的数字,以及 ‘/’, ‘+’ 和 ‘-’。
输入和输出分数格式均为 ±分子/分母。如果输入的第一个分数或者输出的分数是正数,则 ‘+’ 会被省略掉。
输入只包含合法的最简分数,每个分数的分子与分母的范围是 [1,10]。 如果分母是1,意味着这个分数实际上是一个整数。
输入的分数个数范围是 [1,10]。
最终结果的分子与分母保证是 32 位整数范围内的有效整数。

来源:力扣(LeetCode)

解题思路

  利用一个简单的栈进行模拟,由于题目中要求的计算只有加减法,所以我们默认加法然后每个数字自带符号用python自带的eval进行计算,每次两个数字进行求和之后再放入栈中直到栈中的元素剩下一个为止。

class Solution:def fractionAddition(self, expression: str) -> str:if expression[0].isdigit():expression='+'+expressionexpression+='+'temp=expression[0]stack=[]for i in expression[1:]:if i=='-' or i=='+':stack.append(temp)temp=icontinuetemp+=iwhile len(stack)!=1:left=stack.pop()right=stack.pop()lnumerator,ldenominator=left[1:].split('/')rnumerator,rdenominator=right[1:].split('/')denominator=eval(ldenominator+'*'+rdenominator)numerator=eval(rdenominator+'*'+left[0]+lnumerator+'+'+ldenominator+'*'+right[0]+rnumerator)divisor=math.gcd(denominator,numerator)denominator//=divisornumerator//=divisorif numerator>=0:stack.append('+'+str(numerator)+'/'+str(denominator))else:stack.append(str(numerator)+'/'+str(denominator))ans=stack.pop()return ans[1:] if ans[0]=='+' else ans

LeetCode中等题之分数加减运算相关推荐

  1. LeetCode题解(0592):分数加减运算(Python)

    题目:原题链接(中等) 标签:数学.字符串 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N)O(N)O(N) O(N)O(N)O(N) 40ms (67.37%) Ans ...

  2. 图解LeetCode——592. 分数加减运算(难度:中等)

    一.题目 给定一个表示分数加减运算的字符串 expression,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即:最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成 ...

  3. LeetCode 592. 分数加减运算(字符串+最大公约数)

    1. 题目 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母 ...

  4. 【leetcode】592.分数加减运算(python)

    目录 一.题目描述 二.解题思路 2.1 查找 '/' 所在位置(第一思路) 2.2 利用python中分数表达Fraction函数 2.2.1 Fraction函数介绍 2.2.2 解题 2.3 类 ...

  5. LeetCode 0592. 分数加减运算:手把手分步のC++讲解

    [LetMeFly]592.分数加减运算:手把手分步のC++讲解 力扣题目链接:https://leetcode.cn/problems/fraction-addition-and-subtracti ...

  6. Leetcode 592. 分数加减运算 C++

    Leetcode 592. 分数加减运算 题目 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 ...

  7. JAVA程序设计:分数加减运算(LeetCode:592)

    给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1.所以 ...

  8. 592.分数加减运算 纯纯的数学题,Python 7行代码+详细思路分享!

    592.分数加减运算 https://leetcode.cn/problems/fraction-addition-and-subtraction/solution/by-qingfengpython ...

  9. 分数加减运算(java实现)leecode网题目

    input:-1/2+1/2+1/3 out:1/3package 每日算法题;import java.util.Arrays;public class 分数加减运算 {public String f ...

最新文章

  1. Windows10下安装unbuntu双系统 以及花屏解决办法
  2. python怎么装饰_如何理解python装饰器
  3. windows下定时利用bat脚本实现ftp上传和下载
  4. 【年终总结】2019年有三AI知识星球做了什么,明年又会做什么
  5. 利用ajax.dll进行Ajax的开发2007-07-15 15:38
  6. 负样本修正:CVR预估时间延迟问题
  7. The Code Is The Model
  8. 冒泡排序和选择排序区别_你以为只是简单的排序?(一)
  9. conda环境内安装gcc4.8.5(无root权限)
  10. 安装XHProf分析PHP性能瓶颈(原创)
  11. matplotlib——折线图
  12. mount 开机自动挂载
  13. win10 安装oracle 11gR2_database出现universal Installer后闪退就没反应的解决方案
  14. linux复制文件所有属性,Linux 下文件完全复制cp(属性不变)
  15. OpenGL ES 理解纹理与纹理过滤
  16. 关于 cdn、回源等问题一网打尽
  17. 计算机无法发现网络打印机共享,打印机共享无法打印怎么办,详细教您解决电脑打印机共享无法打印...
  18. Ardunio开发实例-BMM150数字地磁传感器
  19. 【线性代数】4-2:投影(Porjections)
  20. 湖泊遥感研究进展(概述)

热门文章

  1. 构建云视频平台的七种武器分别包括长生剑、孔雀翎、碧玉刀、多情环、离别钩、霸王枪、拳头,这七种武器分别对应的是什么技术呢?该文将揭晓答案。
  2. 研究生带28岁腼腆导师一起相亲,被女生围追堵截要微信!
  3. 老师上课也能涨粉?胖超说艺考坐拥千万粉丝靠什么?
  4. UNABLE TO READ CONSUMER IDENTITY
  5. 电脑运行慢?更频繁地使用它
  6. Spring Security 视频教程
  7. 微信小程序:globalData和Storage数据存储的错误示例
  8. HCIP(华为高级网络安全工程师)(第五天)(OSPF协议1)
  9. 全球室内设计界NO.1力作!东呈联合HBA打造柏曼酒店;万豪集团在上海开设第五家福朋喜来登酒店 | 美通社头条...
  10. PlusFo解析“梭哈”逻辑