leetcode 150 逆波兰表达式求值

 

利用栈的原理完成逆波兰表达式计算:

/***
利用栈来存储数字,将string转化为int或符号
**/

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        if (tokens.size()==0||tokens[0].size()==0) return 0;
        stack<int> s;
        int a=0,b=0;
        for(int i=0;i<tokens.size();i++){
            int value=0,flag=1;
            if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){
                int a,b;
                b=s.top();s.pop();
                a=s.top();s.pop();
                if(tokens[i]=="+")
                    value=a+b;
                else if(tokens[i]=="-")
                    value=a-b;
                else if(tokens[i]=="*")
                    value=a*b;
                else if(tokens[i]=="/")
                    value=a/b;
            }else{
                for(int j=0;j<tokens[i].size();j++){
                    if(tokens[i][j]=='-') {flag=-1;continue;}
                    value=10*value+tokens[i][j]-'0';
                }
                value*=flag;
            }
            //cout<<value<<endl;
            s.push(value);
        }
        return s.top();
    }
};

 


 

今天的题目主要是后缀表达式的运算,是栈的性质的经典例题,然后我今天还是卡克了一下,主要是在char与string的不同卡壳,c++/c中,char是‘*’,而string 以及char[]是“789”;类似的char to int为 int量=atoi(char量),string to int为 int量=stoi(string量),需要包含string容器头文件。

此外,这道题我想起了一道计算器设计题,即根据普通数学表达式(带括号的那种),先转换后缀表达式,再进行计算,我觉得可以在这道题基础上把那个做一下,我找了下是leetcode224. Basic Calculator

https://leetcode.com/problems/basic-calculator/

C++代码如下:

 1 class Solution {
 2 public:
 3     int evalRPN(vector<string>& tokens) {
 4         stack<int> st;
 5         if(tokens.size()==1) return stoi(tokens[0]);
 6         for(int i=0;i<tokens.size();i++){
 7             if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){
 8                 int b=st.top();st.pop();
 9                 int a=st.top();st.pop();
10                 int c;
11                 if(tokens[i]=="+") c=a+b;
12                 else if(tokens[i]=="-") c=a-b;
13                 else if(tokens[i]=="*") c=a*b;
14                 else if(tokens[i]=="/") c=a/b;
15                 st.push(c);
16             }else{
17                 int temp=stoi(tokens[i]);
18                 st.push(temp);
19             }
20         }
21         return st.top();
22     }
23 };

 

posted @ 2019-01-20 23:32  Joel_Wang  阅读(591)  评论(0编辑  收藏  举报