• 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 };
  • 相关阅读:
    java中的成员变量、静态变量与局部变量
    java中static关键字的作用
    java中super关键字的作用
    java中this关键字的作用
    Java创建对象的4种方式
    IO体系、集合体系、多线程、jdbc
    二分搜索树
    二叉树搜索(二分查找法)
    索引堆
    原地堆排序
  • 原文地址:https://www.cnblogs.com/joelwang/p/10296703.html
Copyright © 2020-2023  润新知