牛客竞赛算法入门题单打卡 I 牛牛与后缀表达式

文章讲述了如何使用逆波兰表达式(后缀表达式)算法解决给定合法后缀表达式的问题,通过栈来存储操作数并在遇到操作符时进行计算,最终栈顶元素即为表达式的结果。
摘要由CSDN通过智能技术生成

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

给定牛牛一个后缀表达式s,计算它的结果,例如,1+1对应的后缀表达式为1#1#+,‘#’作为操作数的结束符号。

其中,表达式中只含有‘+’、’-‘、’*‘三种运算,不包含除法。

本题保证表达式一定合法,且计算过程和计算结果的绝对值一定不会超过101810^{18}1018

示例1

输入

复制"1#1#+"

"1#1#+"

返回值

复制2

2

说明

1#1#+这个后缀表达式表示的式子是1+1,结果为2 

示例2

输入

复制"12#3#+15#*"

"12#3#+15#*"

返回值

复制225

225

说明

12#3#+15#*这个后缀表达式表示的式子是(12+3)*15,结果为225 

备注:

1≤表达式中操作数≤1091\leq表达式中操作数\leq10^91≤表达式中操作数≤109

1≤表达式长度≤1061\leq表达式长度\leq10^61≤表达式长度≤106

思路

后缀表达式(逆波兰表达式)算法,在读取到操作符前将数字入栈,读取到操作符时,将栈中两数字出栈,先出栈的为右操作数,后出栈的为左操作数,两数字操作后的结果入栈,最后栈内剩下的值即为表达式的值

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 给定一个后缀表达式,返回它的结果
     * @param str string字符串 
     * @return long长整型
     */
    long long legalExp(string str) {
        	long long temp=0;
		stack<long long>st;
		long long a1,a2,len=str.size();
		for(int i=0;i<len;i++)
		{
			if(str[i]=='"')continue;
			if(!st.empty()&&(str[i]=='+'||str[i]=='-'||str[i]=='*'))
			{
				a2=st.top();
				st.pop();
				a1=st.top();
				st.pop();
				if(str[i]=='+')//相加
					st.push(a1+a2);
				else if(str[i]=='-')//相减
					st.push(a1-a2);
				else //相乘
					st.push(a1*a2);
			}
			else{
				if(str[i]!='#')
				{
					temp=temp*10+(str[i]-'0');
				}
				else{
					st.push(temp);
					temp=0;
				}
			}
		}
		return st.top();
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值