leetcode#224 Basic Calculator

来源:互联网 发布:手机视频剪辑拼接软件 编辑:程序博客网 时间:2024/04/30 20:49

题目描述:

Implement a basic calculator to evaluate a simple expression string.

The expression string may contain open ( and closing parentheses ), the plus + or >minus sign -, non-negative integers and empty spaces .

You may assume that the given expression is always valid.

这道题思路比较简单,就是分别计算每一个括号内的表达式的大小。当读到(时就入栈,读到)时就出栈。如此不断执行直到计算出结果。唯一的难点就在于容易把正负号搞混。在我的代码里,我把括号用-1001和-1002来标记正负。

int stack[1000000];int p=0;void push(int x) { stack[p++] = x;}int pop() { return stack[--p];}int calculate(char* s) {    int n = strlen(s);    bool flag = true; // record + and -    int number = 0;   // calculate each integer    int sum = 0;      // calculate the sum    for (int i=0; i<n; i++) {        switch (s[i]) {            case ' ' : break;            case '(' : push(flag?-1001:-1002); flag = true; break;            case ')' : {                int c = pop();                int tmp = number;                while (c != -1001 && c != -1002) {                    tmp += c;                    c = pop();                }                push(c==-1001?tmp:-tmp);                number = 0;                break;            }            case '+' : push(number); number = 0; flag=true; break;            case '-' : push(number); number = 0; flag = false; break;            default : {                number = flag ? number * 10 + (s[i] - '0') : number * 10 - (s[i] - '0');            }        }    }    while(p != 0) {        sum += pop();    }    return sum + number;}
0 0
原创粉丝点击