企业 网站 设计,成都网站开发公司有哪些,互联网创始人,网站管理教程题目描述#xff1a;
给定一个包含正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外)#xff0c;计算其结果。
表达式仅包含非负整数#xff0c;#xff0c; - #xff0c;*#xff0c;/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: …
题目描述
给定一个包含正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外)计算其结果。
表达式仅包含非负整数 - */ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: 32*2
输出: 7示例 2:
输入: 3/2
输出: 1
示例 3:
输入: 35 / 2
输出: 5说明
你可以假设所给定的表达式都是有效的。
class Solution { public int calculate(String s) { }
} 思路我们可以使用栈来进行处理。如果是加或者减就把它压入栈如果是乘除就把栈顶元素pop来与乘/除号后面的元素计算然后再push。最后把栈所有元素取出相加。 需要处理 因为可能会出现一位数以上的数字比如两位数字3所以我们需要进行这样的处理
numnum*10s.charAt(i)-0; 判断
数字if(Character.isDigit(s.charAt(i)){ )
符号/带空格/最后一位是数字
if(!Character.isDigit(s.charAt(i) s.charAt(i) || ilength-1 ){ )
数字的处理就用num那个
符号/带空格/最后一位是数字处理
switch(sign){
case :
stack.push(num);
break;
case -:
stack.push(-num);
break;
case *:
stack.push(stack.pop * num);
break;
default:
stack.push(stack.pop / num);
break;
}
signs.charAt(i);
num0;//在这个if里归零 循环结束
int result0;
while(!stack.isempty()){ result stack.pop
}
完整代码
class Main{public int calculate(String s) {
DequeInteger stacknew ArrayDeque();char preSign;int num0;int lengths.length();for (int i 0; i length ; i) {if (Character.isDigit(s.charAt(i))){numnum*10s.charAt(i)-0;}if (!Character.isDigit(s.charAt(i))s.charAt(i)! ||ilength-1){switch (preSign){case :stack.push(num);break;case -:stack.push(-num);break;case *:stack.push(stack.pop()*num);break;default:stack.push(stack.pop()/num);break;}preSigns.charAt(i);num0;}}int result0;while(!stack.isEmpty()){resultstack.pop();}return result;}
}