题解 | 表达式求值

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    public int solve (String s) {
        String[] dateArr = s.split("");
        Stack<String> dealStack = new Stack<>();

        for (String s1 : dateArr) {
            if (s1.equals(")")) {
                String compute = "";
                while (!dealStack.isEmpty()) {
                    String pop = dealStack.pop();
                    if (pop.equals("(")) {
                        Integer i = computeData(compute);
                        dealStack.push(i + "");
                        break;
                    } else {
                        compute = pop + compute;
                    }
                }
            } else {
                dealStack.push(s1);
            }
        }
        String res = "";
        while (!dealStack.isEmpty()) {
            res = dealStack.pop() + res;
        }
        return computeData(res);
    }

    public int computeData(String data) {
        String[] split = data.split("");
        List<Object> dataRes = new ArrayList<>();

        int preI = 0;
        String pre = "";
        Integer prex = null;
        for (int i = 0; i < split.length; i++) {
            String s = split[i];
            if (s.equals("*")) {
                String add = data.substring(preI, i);
                if (prex != null) {
                    prex = new Integer(add) * prex;
                } else  {
                    prex = new Integer(data.substring(preI, i));
                }
                preI = i + 1;
            } else if (s.equals("-")) {
                if (i==0) {
                    continue;
                }
                if (pre.equals("-") || pre.equals("+") || pre.equals("*")) {
                    preI = i;
                } else {
                    String add = data.substring(preI, i);
                    if (prex != null) {
                        dataRes.add(new Integer(add) * prex);
                        prex = null;
                    } else  {
                        dataRes.add(add);
                    }
                    dataRes.add("-");
                    preI = i + 1;
                }

            } else if (s.equals("+")) {
                String add = data.substring(preI, i);
                if (prex != null) {
                    dataRes.add(new Integer(add) * prex);
                    prex = null;
                } else  {
                    dataRes.add(add);
                }
                dataRes.add("+");
                preI = i + 1;
            }
            if (i == split.length - 1) {
                String add = data.substring(preI, i + 1);
                if (prex != null) {
                    dataRes.add(prex * new Integer(add));
                    prex = null;
                } else {
                    dataRes.add(add);
                }

            }
            pre = s;
        }

        Integer ust = 0;
        Iterator<Object> iterator = dataRes.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            if (next.equals("+")) {
                ust = ust + new Integer(iterator.next() + "");
            } else if (next.equals("-")) {
                ust = ust - new Integer(iterator.next() + "");
            } else {
                ust = new Integer(next.toString());
            }
        }
        return ust;
    }
}

全部评论

相关推荐

评论
2
收藏
分享

创作者周榜

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