Leetcode 基本计算器 II JAVA

题目:

实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式仅包含非负整数,+, - ,*/ 四种运算符和空格  。 整数除法仅保留整数部分。

示例 1:

输入: "3+2*2"
输出: 7

示例 2:

输入: " 3/2 "
输出: 1

示例 3:

输入: " 3+5 / 2 "
输出: 5

解题:

 先令sign为‘+’,取新符号前处理上一个符号。 eg. 3 * 5 + 2   即· + 3 * 5 + 2 取到 * 时,处理 + 3,然后令sign = * ;取到 + 时,处理 3 * 5,令sign = +;最后 i == s.length() - 1,处理 15 + 2;

class Solution {
    public int calculate(String s) {
          int res = 0, d = 0;
         char sign = '+';
         Stack<Integer> nums = new Stack<Integer>();
         for(int i = 0; i < s.length(); i++) {
             if(s.charAt(i) >= '0') { //加减乘除和空格的ASCII码都小于'0'
                 d =d * 10 + s.charAt(i) - '0';
             }
             if((s.charAt(i) < '0' && s.charAt(i) !=' ') || i == s.length() - 1) {
                 if(sign == '+') {
                     nums.push(d);
                 }else if(sign == '-') {
                     nums.push(-d);
                 }else if(sign == '*' || sign == '/') {
                     int tmp = sign == '*' ? nums.peek() * d : nums.peek() / d;
                     nums.pop();
                     nums.push(tmp);
                 }
                 sign = s.charAt(i);
                 d = 0;
             }
         }
        for(int t : nums) {
             res += t;
         }
         return res;
     }
    
}

 

posted @ 2019-07-02 15:57  yanhowever  阅读(699)  评论(0编辑  收藏  举报