難度:4.5/5
一開始沒想出來好的解法而用中序轉後序爆開做,後來看到morris大神的解法才想出來可以把整個expression改成以及分隔的若干個expressions.
eval.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| #include <stdbool.h> #include "eval.h"
bool check_invalid(int exp[]){ int n = exp[0]; for(int i = 2; i <= n; i += 2){ if(exp[i] > 4 || exp[i] <= 0) return true; } return false; }
int eval(int exp[]) { int n = exp[0]; if(check_invalid(exp)) return -2147483646;
int ans = 0; int hold_val = exp[1];
for(int i = 3; i <= n; i += 2){ int op = exp[i - 1]; int num = exp[i];
if(op == 1){ ans += hold_val; hold_val = num; } else if(op == 2){ ans += hold_val; hold_val = -num; } else if(op == 3){ hold_val *= num; } else{ if(num == 0) return -2147483647; else hold_val /= num; } }
ans += hold_val; return ans; }
C
|
eval.h