227. Basic Calculator II

要注意的就是我们在处理每个数字结果之前,都已经确定了它前面有的sign。

class Solution {
    public int calculate(String s) {
        if (s == null || s.length() == 0){
            return 0;
        }
        //"3+2*2"
        //stack: 4 3
        //num:2
        s = s.replaceAll(" ","");//does this line of code has effect on time complexity?
        int res = 0;
        char sign = '+';
        int num = 0;
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            if (Character.isDigit(c)){
                num = c - '0';
                while (i + 1 < s.length() && Character.isDigit(s.charAt(i+1))){
                    num = num*10 + s.charAt(i+1) - '0';
                    i++;
                }
            } 
            if (!Character.isDigit(s.charAt(i)) || i == s.length() - 1){
                if (sign == '+'){
                    stack.push(num);
                } else if (sign == '-'){
                    stack.push(-num);
                } else if (sign == '*'){
                    stack.push(stack.pop() * num);
                } else if (sign == '/'){
                    stack.push(stack.pop() / num);
                }
                sign = s.charAt(i);
                num = 0;
            }
        }
        for (int i : stack){
            res += i;
        }
        return res;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容