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();
        }
    };


  • 相关阅读:
    hive之窗口函数
    linux环境下Mysql的卸载和重新安装和启动
    2017ACM暑期多校联合训练
    2017ACM暑期多校联合训练
    状态压缩dp
    铺砖问题 (状态压缩dp)
    POj 2104 K-th Number (分桶法+线段树)
    POJ 2991 Crane (线段树)
    4 Values whose Sum is 0 POJ 2785 (折半枚举)
    Billboard HDU 2795 (线段树)
  • 原文地址:https://www.cnblogs.com/sunp823/p/5601420.html
Copyright © 2011-2022 走看看