Basic Calculator

来源:互联网 发布:linux修改系统时间命令 编辑:程序博客网 时间:2024/05/17 02:14


题目描述: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

Note: Do not use the eval built-in library function.

解题思路:采用一个栈存储,使用边扫描字符串边入栈并计算的过程,当输入元素符合计算条件时,出栈并计算,计算后结果入栈。

Java代码实现:

public class Solution {    public int calculate(String s) {        Stack<String> stack=new Stack<String>();        for(int i=0;i<s.length();i++){            char ch=s.charAt(i);            String strNum="";            if(ch!=' '){                if(ch=='+'||ch=='-'||ch=='('){                    stack.push(String.valueOf(ch));                }                else if(ch>='0'&&ch<='9'){//保证多位数字                    strNum=String.valueOf(ch);                    while(i!=s.length()-1&&s.charAt(i+1)>='0'&&s.charAt(i+1)<='9'){                        strNum+=s.charAt(++i);                    }                    while(!stack.isEmpty()){                        String str=stack.peek();                        if("(".equals(str)){                            stack.push(strNum);                            break;                        }                        if("+".equals(str)||"-".equals(str)){                            String op=stack.pop();                            if("+".equals(op)){                                strNum=String.valueOf(Integer.valueOf(strNum)+Integer.valueOf(stack.pop()));                            }                            else if("-".equals(op)){                                strNum=String.valueOf(Integer.valueOf(stack.pop())-Integer.valueOf(strNum));                            }                        }                    }                    if(stack.isEmpty()) stack.push(strNum);                }                else if(ch==')'){                    strNum=stack.pop();                    stack.pop();                    while(!stack.isEmpty()){                        String str=stack.peek();                        if("(".equals(str)){                            stack.push(strNum);                            break;                        }                        if("+".equals(str)||"-".equals(str)){                            String op=stack.pop();                            if("+".equals(op)){                                strNum=String.valueOf(Integer.valueOf(strNum)+Integer.valueOf(stack.pop()));                            }                            else if("-".equals(op)){                                strNum=String.valueOf(Integer.valueOf(stack.pop())-Integer.valueOf(strNum));                            }                        }                    }                    if(stack.isEmpty()) stack.push(strNum);                }            }                        }        return Integer.valueOf(stack.pop());            }}
原题地址:https://leetcode.com/problems/basic-calculator/

0 0
原创粉丝点击