zoukankan      html  css  js  c++  java
  • leetcode_Basic Calculator

    题目:

    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.

    思路:栈的使用,括号的优先级最高。

    class Solution {
    public:
        int calculate(string s) {
            int len = s.length();
    	stack<int> st;
    	int i = 0;
    	int result = 0;
    	while(i<len)
    	{
    		int sum = 0;
    		if(s.at(i)>='0'&&s.at(i)<='9')
    		{
    			int j = i+1;
    			sum = s.at(i)-'0';
    			while(j<=len-1&&s.at(j)>='0'&&s.at(j)<='9')
    			{
    				sum = (sum*10 + (s.at(j) - '0')); 
    				j++; 
    			}
    		//	cout<<sum<<endl; 
    			//以上计算数字字符串转化为数字
    			if(!st.empty()&&(char)st.top()=='+')
    			{
    				st.pop();
    				result = st.top()+sum;
    				st.pop();
    				st.push(result);	
    			}
    			else if(!st.empty()&&(char)st.top()=='-')
    			{
    				st.pop();
    				result = st.top()-sum;
    				st.pop();
    				st.push(result);	
    			} 
    			else
    			{
    				st.push(sum);
    			}
    			i = j;
    		}
    		
    		else if(s.at(i)==' ')
    		{
    			i++;
    		}
    		else if(s.at(i)=='+'||s.at(i)=='-')
    		{
    			st.push((int)s.at(i));
    			i++;
    		}
    		else if(s.at(i)=='(')
    		{
    			st.push((int)s.at(i));
    			i++;
    		}
    		else if(s.at(i)==')')
    		{
    			int temp = st.top();
    			if(!st.empty())
    			st.pop();
    			if(!st.empty())
    			st.pop();
    			if(!st.empty()&&st.top()=='+')
    			{
    				st.pop();//去掉 
    				temp = temp+(st.top());
    				st.pop();
    				st.push(temp);
    			}
    			else if(!st.empty()&&st.top()=='-')
    			{
    				st.pop();//去掉 
    				temp = (st.top())-temp;
    				st.pop();
    				st.push(temp);
    			}
    			else
    			{
    				st.push(temp);
    			}
    		    i++;
    		}
    	}
    	return st.top();
        }
    };


  • 相关阅读:
    GYM 101572C(模拟)
    GYM 101572A(单调队列优化dp)
    Codeforces 183C(有向图上的环长度)
    Codeforces 183A(坐标系性质)
    2019湘潭校赛 G(并查集)
    2019湘潭校赛 H(dp)
    2019湘潭校赛 E(答案区间维护)
    Codeforces 1141F2(贪心、预处理)
    Codeforces Round #411(Div. 2)——ABCDEF
    基数排序学习
  • 原文地址:https://www.cnblogs.com/sunp823/p/5601420.html
Copyright © 2011-2022 走看看