当前位置:网站首页>LeetCode中等题之分数加减运算
LeetCode中等题之分数加减运算
2022-07-31 02:56:00 【·星辰大海】
题目
给定一个表示分数加减运算的字符串 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='+'+expression
expression+='+'
temp=expression[0]
stack=[]
for i in expression[1:]:
if i=='-' or i=='+':
stack.append(temp)
temp=i
continue
temp+=i
while 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//=divisor
numerator//=divisor
if 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
边栏推荐
- SQL注入 Less54(限制次数的SQL注入+union注入)
- 分布式与集群是什么 ? 区别是什么?
- SQL 面试用题(重点)
- LeetCode 1161 The largest element in the layer and the LeetCode road of [BFS binary tree] HERODING
- 2022牛客多校联赛第四场 题解
- Classic linked list OJ strong training problem - fast and slow double pointer efficient solution
- 10 Permission introduction
- Compile Hudi
- 7. List of private messages
- Installation, start and stop of redis7 under Linux
猜你喜欢
The Sad History of Image Processing Technology
什么是分布式锁?实现分布式锁的三种方式
php 网站的多语言设置(IP地址区分国内国外)
7. List of private messages
4. Sensitive word filtering (prefix tree)
【银行系列第一期】中国人民银行
全流程调度——MySQL与Sqoop
10. Redis implements likes (Set) and obtains the total number of likes
你们程序员为什么不靠自己的项目谋生?而必须为其他人打工?
Installation of mysql5.7.37 under CentOS7 [perfect solution]
随机推荐
JetPack组件Databinding
7. List of private messages
华为分布式存储FusionStorage知识点总结【面试篇】
Mathematics to solve the problem - circular linked list
11. Redis implements follow, unfollow, and follow and follower lists
CMOS和TTL的区别?
Linux下redis7的安装,启动与停止
LeetCode 每日一题 2022/7/25-2022/7/31
16、热帖排行
软件积累 -- 截图软件ScreenToGif
print task sorting js od huawei
Installation, start and stop of redis7 under Linux
品牌广告投放平台的中台化应用与实践
CefSharp入门-winform
CentOS7下mysql5.7.37的卸载【完美方案】
What is a distributed lock?Three ways of implementing distributed lock
JS 函数 this上下文 运行时点语法 圆括号 数组 IIFE 定时器 延时器 self.备份上下文 call apply
The simulation application of common mode inductance is here, full of dry goods for everyone
JetPack component Databinding
刚出道“一战成名”,安全、舒适一个不落