当前位置:网站首页>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

边栏推荐
- YOLOV5 study notes (2) - environment installation + operation + training
- Installation, start and stop of redis7 under Linux
- SQL injection Less47 (error injection) and Less49 (time blind injection)
- 基于opencv实现人脸检测
- 开题报告之论文框架
- 4、敏感词过滤(前缀树)
- Discourse Custom Header Links
- 图解lower_bound&upper_bound
- 【shell基础】判断目录是否为空
- MPPT solar charge controller data collection - through the gateway acquisition capacity battery SOC battery voltage, wi-fi
猜你喜欢

Hanyuan Hi-Tech 8-channel HDMI integrated multi-service high-definition video optical transceiver 8-channel HDMI video + 8-channel two-way audio + 8-channel 485 data + 8-channel E1 + 32-channel teleph

The principle of complete replication of virtual machines (cloud computing)

【C语言】三子棋(经典解法+一览图)

【银行系列第一期】中国人民银行

加密公司向盗窃的黑客提供报价:保留一点,把剩下的归还
![[Android] Room - Alternative to SQLite](/img/52/0bc1c0a3173da6d39224ad8440a462.png)
[Android] Room - Alternative to SQLite

The simulation application of common mode inductance is here, full of dry goods for everyone

Intel's software and hardware optimization empowers Neusoft to accelerate the arrival of the era of smart medical care

6、显示评论和回复

SQL injection Less46 (injection after order by + rand() Boolean blind injection)
随机推荐
加密公司向盗窃的黑客提供报价:保留一点,把剩下的归还
Face detection based on opencv
Hanyuan Hi-Tech 8-channel HDMI integrated multi-service high-definition video optical transceiver 8-channel HDMI video + 8-channel two-way audio + 8-channel 485 data + 8-channel E1 + 32-channel teleph
Mysql 45讲学习笔记(二十四)MYSQL主从一致
Difference between CMOS and TTL?
【C语言】三子棋(经典解法+一览图)
7、私信列表
The principle of complete replication of virtual machines (cloud computing)
Go 项目实战-获取多级分类下的全部商品
Crypto Firms Offer Offer To Theft Hackers: Keep A Little, Give The Rest
STM32CUBEMX开发GD32F303(11)----ADC在DMA模式下扫描多个通道
自动化办公案例:如何自动生成期数据?
The simulation application of common mode inductance is here, full of dry goods for everyone
拒绝加班,程序员开发的效率工具集
12 Disk related commands
JetPack组件Databinding
LeetCode 1161 The largest element in the layer and the LeetCode road of [BFS binary tree] HERODING
MPPT太阳能充放电控制器数据采集-通过网关采集电池电压容量电量SOC,wifi传输
汉源高科8路HDMI综合多业务高清视频光端机8路HDMI视频+8路双向音频+8路485数据+8路E1+32路电话+4路千兆物理隔离网络
关于 mysql8.0数据库中主键位id,使用replace插入id为0时,实际id插入后自增导致数据重复插入 的解决方法