Basic Calculator---Nice

题目描述

Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
“1 + 1” = 2
” 2-1 + 2 ” = 3
“(1+(4+5+2)-3)+(6+8)” = 23

题目解答

解题思路

基本思路使用栈来解决,栈里面的内容是result和sign符号的正负
有很多细节需要注意

代码实现

public class Solution {
    public int calculate(String s) {
        if(s == null || s.length() == 0)
            return -1;


        // 栈里面保存结果 和 符号的正负
        ArrayDeque<Integer> stack = new ArrayDeque<>();

        //结果 符号 数值
        int result = 0;
        int sign = 1;
        int num = 0;


        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            if(c >= '0' && c <= '9'){
                //注意进位
                num = num*10 +(c-'0');
            }else if(c == '+'){
                //遇到下一个 + - 再计算
                result += (sign*num);
                sign = 1;
                num = 0;
            }else if(c == '-'){
                result += (sign*num);
                sign = -1;
                num = 0;
            }else if(c == '('){
                stack.push(result);
                stack.push(sign);
                result = 0;
                sign = 1;
            }else if(c == ')'){
                //注意 括号里的结果
                result += (sign*num);

                result *= (stack.pop());
                result += (stack.pop());
                //括号里计算为完之后要清零
                num = 0;
            }
        }

        if(num != 0)
            result += (sign*num);

        return result;
    }
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangxishidayuan/article/details/49946993
文章标签: 计算
个人分类: 算法和刷题
上一篇Group Anagrams
下一篇Basic CalculatorII
想对作者说点什么? 我来说一句

android系统 basic语言 手机编程

2011年12月14日 890KB 下载

没有更多推荐了,返回首页

关闭
关闭