给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式
(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格。
整数除法仅保留整数部分。
示例:
输入: "3+2*2"
输出: 7
答案:
//思路
1.碰到数字直接入栈
2.碰到空格,直接下一步
3.碰到 + - * /
碰到+ 下一个数字直接入栈
碰到- -num入栈(num=-num)
碰到* 弹出上个数字相乘后入栈(num = stack.pop() * num)
碰到/ num = stack.pop() / num入栈
class Solution {
public int calculate(String s)
{
char[] cs=s.trim().toCharArray();
//trim方法 去掉首尾空格
Stack<Integer> st = new Stack();
int i=0,ans=0;
while(i<cs.length)
{
if(cs[i]==' ')
{
i++;
continue;
}
char tmp = cs[i];
if(tmp == '+' || tmp == '-' || tmp == '*' || tmp == '/') {
i++;
while(i<cs.length && cs[i]==' ') i++;
}
int num=0;
while(i<cs.length && Character.isDigit(cs[i]))
{
num = num*10 + cs[i] - '0';
//字符串减去‘0’ 可以字符转换为数字
i++;
}
switch(tmp){
case '-':
num=-num;
break;
case '*':
num=st.pop()*num;
break;
case '/':
num=st.pop()/num;
break;
default:
break;
}
st.push(num);
}
while(!st.isEmpty())//把栈中的数字相加
{
ans+=st.pop();
}
return ans;
}
}