[ 题目描述 ]:
[ 思路 ]:
- 借助栈的特性,遇见数字就将这个数压入栈内,遇见符号,就从栈中弹出两个数,进行相应的运算,然后将结果压入栈中
- 运行如下
int evalRPN(char** tokens, int tokensSize) {int* stack = (int*)malloc(sizeof(int) * tokensSize);int top = -1;for (int i = 0; i < tokensSize; i++) {if (strcmp(tokens[i], "*") == 0) {int a = stack[top--];int b = stack[top--];stack[++top] = b * a;} else if (strcmp(tokens[i], "+") == 0) {int a = stack[top--];int b = stack[top--];stack[++top] = b + a;} else if (strcmp(tokens[i], "-") == 0) {int a = stack[top--];int b = stack[top--];stack[++top] = b - a; } else if (strcmp(tokens[i], "/") == 0) {int a = stack[top--];int b = stack[top--];stack[++top] = b / a; } else {int num = 0;int sign = 1;int j = 0;if (tokens[i][0] == '-') {sign = -1;j = 1;}for (; tokens[i][j] != '\0'; j++) {num = num * 10 + (tokens[i][j] - '0');}stack[++top] = num * sign;}}int result = stack[top];free(stack);return result;
}
[ 官方题解 ]:
- 方法一:栈,思路基本同上
- 方法二:数组模拟栈,即,上述操作