实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。 示例 1: 输入: "3+2*2" 输出: 7 示例 2: 输入: " 3/2 " 输出: 1 示例 3: 输入: " 3+5 / 2 " 输出: 5 说明: 你可以假设所给定的表达式都是有效的。 请不要使用内置的库函数 eval。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/basic-calculator-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
自己题解:
class Solution { public int calculate(String s) { s = s.replaceAll(" ", ""); Stack<Integer> stack = new Stack<>(); Character lastOperate = '+'; for (int i=0; i<s.length(); i++) { if (s.charAt(i) >= '0' && s.charAt(i) <='9') { int j=i+1; int num = s.charAt(i) - '0'; while (j < s.length()) { if (s.charAt(j) >= '0' && s.charAt(j) <= '9') { num = num * 10 + (s.charAt(j) - '0'); j++; i++; } else { break; } } if (lastOperate == '+') { stack.push(num); } else if (lastOperate == '-') { stack.push(-num); } else if (lastOperate == '*') { stack.push(stack.pop() * num); } else if (lastOperate == '/') { stack.push(stack.pop() / num); } } else { lastOperate = s.charAt(i); } } int ret = 0; while (stack.size() > 0) { ret += stack.pop(); } return ret; } }
分析: 这题有两点,第一点是需要将整数转数字,第二点是,先利用栈,将乘法和除法都计算好,将算好的结果放入栈,那栈里面的就都可以通过加法解决,妙哉。
ps:上面代码是比较挫,没毛病