当前位置:网站首页>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
边栏推荐
- 刚出道“一战成名”,安全、舒适一个不落
- 【C语言】求两个整数m和n的最大公因数和最小公倍数之和一般方法,经典解法
- 分布式与集群是什么 ? 区别是什么?
- 6、显示评论和回复
- Huawei od dice js
- 【C语言基础】解决C语言error: expected ‘;‘, ‘,‘ or ‘)‘ before ‘&‘ token
- 7. List of private messages
- MPPT solar charge controller data collection - through the gateway acquisition capacity battery SOC battery voltage, wi-fi
- return in try-catch
- SQL 面试用题(重点)
猜你喜欢
Pythagorean tuple od js
【C语言】表达式求值的一般方法
Why is String immutable?
接口测试关键技术
Intranet Infiltration - Privilege Escalation
Is interprofessional examination difficult?Low success rate of "going ashore"?Please accept this practical guide!
Local area network computer hardware information collection tool
11、Redis实现关注、取消关注以及关注和粉丝列表
12 磁盘相关命令
【Bank Series Phase 1】People's Bank of China
随机推荐
AI在医疗影像设备全流程应用
15. Website Statistics
YOLOV5 study notes (2) - environment installation + operation + training
【C语言】进制转换一般方法
2022牛客多校联赛第四场 题解
Chapter 9 SVM实践
The use of font compression artifact font-spider
Mysql 45讲学习笔记(二十三)MYSQL怎么保证数据不丢
Is interprofessional examination difficult?Low success rate of "going ashore"?Please accept this practical guide!
Refuse to work overtime, a productivity tool set developed by programmers
execsnoop 工具
Thesis framework of the opening report
10 Permission introduction
YOLOV5 study notes (3) - detailed explanation of network module
STM32CUBEMX开发GD32F303(11)----ADC在DMA模式下扫描多个通道
16、热帖排行
PMP微信群日常习题
什么是分布式锁?实现分布式锁的三种方式
15、网站统计数据
品牌广告投放平台的中台化应用与实践