首先,简单计算器中就只有加法和减法,左括号右括号数字,也有可能有空格
然后,网上大神的代码是
public class Solution {
// "1 + 1"
public int calculate(String s) {
if(s==null || s.length() == 0) return 0;
Stack<Integer> stack = new Stack<Integer>();
int res = 0;
int sign = 1;
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if(Character.isDigit(c)) {
int cur = c-'0';
//当下一个字符也是数字(意思就是不是一个只有0-9的数字,可能12 34 等)
//,并且不越界
while(i+1<s.length() && Character.isDigit(s.charAt(i+1))) {
cur = 10*cur + s.charAt(++i) - '0';
}
res += sign * cur;
} else if(c=='-') {
sign = -1;
} else if(c=='+') {
sign = 1;
} else if( c=='(') {
stack.push(res);
res = 0;
stack.push(sign);
sign = 1;
} else if(c==')') {
res = stack.pop() * res + stack.pop();
sign = 1;
}
}
return res;
}
}
只用了一个栈,网上也有别的方法用了数字栈和符号栈,还有其他的标识符,感觉很麻烦,就以大神的代码为例ba
(1)res:最后计算器返回值是res,中间也复用了res作为括号内部的计算结果
(2)sign:标识符,+号表示为+1,-号表示为-1,很容易理解
(3)char c = s.charAt(i); charAt(i)取i位置的字符
(4)Character.isDigit(c)
http://www.51gjie.com/java/597.html
(5)int cur = c-'0'; 将字符格式的数字转换为整型数字
(6)cur = 10*cur + s.charAt(++i) - '0';