leetcode150–逆波兰表达式求值(栈/后缀表达式)

简介: leetcode150–逆波兰表达式求值(栈/后缀表达式)

根据 逆波兰表示法,求表达式的值。


有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。


说明:


整数除法只保留整数部分。

给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。


示例 :


输入:tokens = [“2”,“1”,"+",“3”,"*"]

输出:9

解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

贴一个贼丑的代码 心塞塞。

//咋想的啊 能写出一句
//top = top -= 2;
//无了大语了
int evalRPN(char ** tokens, int tokensSize){
    int *stack = (int *)calloc(tokensSize,sizeof(int));
    int top = 0;
    int a,b;
    // printf("%s",tokens[top]);
    for(int i = 0;i < tokensSize;i++)
    {
        char *c = tokens[i];
        // printf("%s",c);
        // printf("%c",c[0]);
        // if(c[0] >= 42 && c[0] <= 48)
            // printf("aaa");
        // if()/
//         // if(tokens[i] == '+' || tokens[i] == '-' || tokens[i] == '*' || tokens[i] == '/' )
        //以上注释 代表我的思考过程 到底咋判断啥是符号 小垃圾 
        if(strlen(c) == 1 && c[0] >= 42 && c[0] <= 47 )
        {
            b = stack[top-1];
            a = stack[top-2];
            top = top- 2;
            switch(c[0])
            {
                case '+':
                    stack[top++] = a+b;
                    break;
                case '-':
                    stack[top++] = a-b;
                    break;
                case '*':
                    stack[top++] = a*b;
                    break;
                case '/':
                    stack[top++] = a/b;
                    break;
            }
//             // stack[top++] = a
        }
        else
        {
            stack[top++] = atoi(c); //数字 🔢
        }
    }
    return stack[--top];
}
相关文章
|
存储 算法 测试技术
力扣经典150题第五十四题:最小栈
力扣经典150题第五十四题:最小栈
127 0
|
存储 算法 索引
力扣每日一题 6/24 模拟 数组 单调栈
力扣每日一题 6/24 模拟 数组 单调栈
118 0
【LeetCode 24】225.用队列实现栈
【LeetCode 24】225.用队列实现栈
97 0
|
算法
【LeetCode 23】232.用栈实现队列
【LeetCode 23】232.用栈实现队列
96 0
|
Python
【Leetcode刷题Python】946. 验证栈序列
LeetCode题目“946. 验证栈序列”的Python解决方案,通过模拟栈的压入和弹出操作来验证给定的两个序列是否能通过合法的栈操作得到。
172 6
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
161 4
|
Python
【Leetcode刷题Python】剑指 Offer 09. 用两个栈实现队列
使用两个栈实现队列的Python解决方案,包括初始化两个栈、实现在队列尾部添加整数的appendTail方法和在队列头部删除整数的deleteHead方法,以及相应的示例操作。
126 2
|
存储 算法 Python
二刷力扣--栈和队列
二刷力扣--栈和队列
118 1
|
Python
【Leetcode刷题Python】232. 用栈实现队列
如何使用Python语言通过两个栈来实现队列的所有基本操作,包括入队(push)、出队(pop)、查看队首元素(peek)和判断队列是否为空(empty),并提供了相应的代码实现。
98 0
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
190 0