题解 | #表达式求值#

表达式求值

https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    public int solve (String s) {
        // write code here
        Map<String,Integer> res= func(s,0);
        return res.get("num");
    }

    public Map<String,Integer> func(String s,int index){
        Stack<Integer> st = new Stack<Integer>();
        int num = 0;
        char op = '+';
        int i;
        for(i = index;i< s.length();i++){
            if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
                num = num * 10+ s.charAt(i) - '0';
                if(i != s.length() - 1){
                    continue;
                }
            }

            if(s.charAt(i) == '('){
                Map<String,Integer> res = func(s,i + 1);
                num = res.get("num");
                i = res.get("i");
                if(i != s.length() - 1){
                    continue;
                }
            }

            switch(op){
                case '+':
                    st.push(num);
                    break;
                case '-':
                    st.push(-num);
                    break;
                case '*':
                    int temp = st.pop();
                    st.push(temp * num);
                    break;
            }
            num = 0;
            if(s.charAt(i) == ')'){
                break;
            }else{
                op = s.charAt(i);
            }
        }
        int sum = 0;
        while(!st.isEmpty()){
            sum += st.pop();
        }
        Map<String,Integer> temp = new HashMap<>();
        temp.put("num",sum);
        temp.put("i",i);
        return temp;
    }
}

全部评论

相关推荐

码农索隆:卡学历都不行了,开始卡颜值了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-11 13:34
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务