美文网首页
LeetCode #224 Basic Calculator

LeetCode #224 Basic Calculator

作者: 刘煌旭 | 来源:发表于2021-04-18 06:16 被阅读0次
Basic_Calculator.png
/**
* Abstract: Utilize the system-provided stack-----recursion
*/
size_t parse_val(char *s, size_t n, size_t start, int *val) {
    *val = 0;
    while (start < n && isdigit(s[start])) { *val = 10 * *val + (s[start++] - '0'); }
    return start;
}

int perform(int val1, int val2, char op) {
    if (op == '-') { return val1 - val2; }
    if (op == '+') { return val1 + val2; }
    return 0;
}

int evaluate(char *s, size_t *start, size_t n) {
    int val = 0;
    char op = '\0';
    while (*start < n) {
        if (isdigit(s[*start])) {
            int rval = 0;
            *start = parse_val(s, n, *start, &rval);
            if (op != '\0') { 
                val = perform(val, rval, op); 
                op = '\0';
            } else {
                val = rval;
            }
        } else if (s[*start] == '(') {
            (*start)++;
            int rval = evaluate(s, start, n);
            if (op != '\0') { 
                val = perform(val, rval, op); 
                op = '\0';
            } else {
                val = rval;
            }
        } else if (s[*start] == ')') {
            (*start)++;
            return val;
        } else if (s[*start] == ' ') {
            (*start)++;
        }  else {
            op = s[(*start)++];
        }
    }

    return val;

}

int calculate(char * s) { 
    size_t start = 0;
    return evaluate(s, &start, strlen(s)); 
}

相关文章

网友评论

      本文标题:LeetCode #224 Basic Calculator

      本文链接:https://www.haomeiwen.com/subject/gpjmlltx.html