华为od机试计算器带括号加减乘除“+-*/()”

华为od机试遇到的,没做完。应该是力扣plus题目我没会员看不到,在外面3小时做出来了。我是个five

public static int a(String s) {
    s =s.replace(" ","");
    char[] charArray = s.toCharArray();
    LinkedList<String> z = new LinkedList<>();
    LinkedList<String> js = new LinkedList<>();

    StringBuilder stringBuilder = new StringBuilder();
    for (int i = 0; i < charArray.length; i++) {
        if(charArray[i] == '*' || charArray[i] == '/' || charArray[i] == '+' || charArray[i] == '-' || charArray[i] == '(' ){
            if (!stringBuilder.isEmpty()) {
                z.addLast(stringBuilder.toString());
                stringBuilder.delete(0, stringBuilder.length());
            }
            z.addLast(charArray[i]+"");
        }else if(charArray[i] == ')'){
            if (!stringBuilder.isEmpty()) {
                z.addLast(stringBuilder.toString());
                stringBuilder.delete(0, stringBuilder.length());
            }
            while (!"(".equals(z.peekLast())){
                js.addFirst(z.pollLast());
            }
            z.pollLast();
            z.addLast(String.valueOf(calculate(js)));
            js.clear();
        }else {
            stringBuilder.append(charArray[i]);
            if (i == charArray.length - 1) {
                z.addLast(stringBuilder.toString());
                stringBuilder.delete(0, stringBuilder.length());
            }
        }
    }
        return calculate(z);
}
public static int calculate(LinkedList<String> s) {
    LinkedList<Integer> nums = new LinkedList<>();
    LinkedList<String> fh = new LinkedList<>();
    StringBuilder stringBuilder = new StringBuilder();
    boolean jisuan = false;
    for (int i = 0; i < s.size(); i++) {
        if ("*".equals(s.get(i)) || "/".equals(s.get(i)) || "+".equals(s.get(i)) || "-".equals(s.get(i))) {
            if (!stringBuilder.isEmpty()) {
                nums.addLast(Integer.valueOf(stringBuilder.toString()));
                stringBuilder.delete(0, stringBuilder.length());
                if (jisuan) {
                    Integer num2 = nums.pollLast();
                    Integer num1 = nums.pollLast();
                    nums.addLast(jisuan(num1, num2, fh.pollLast()));
                    jisuan = false;
                }
            }
            if ("*".equals(s.get(i)) || "/".equals(s.get(i)) ) {
                jisuan = true;
                fh.addLast(s.get(i));
            } else {
                fh.addLast(s.get(i));
            }
        } else {
            stringBuilder.append(s.get(i));
            if (i == s.size() - 1 && !stringBuilder.isEmpty()) {
                nums.addLast(Integer.valueOf(stringBuilder.toString()));
                stringBuilder.delete(0, stringBuilder.length());
                if (jisuan) {
                    Integer num2 = nums.pollLast();
                    Integer num1 = nums.pollLast();
                    nums.addLast(jisuan(num1, num2, fh.pollLast()));
                    jisuan = false;
                }
            }
        }
    }
    while (nums.size() != 1) {
        Integer num1 = nums.pollFirst();
        Integer num2 = nums.pollFirst();
        nums.addFirst(jisuan(num1, num2, fh.pollFirst()));
    }
    return nums.peek();
}

public static Integer jisuan(Integer i, Integer j, String fuhao) {
    Integer value = null;
    if ("+".equals(fuhao)) {
        value = i + j;
    } else if ("-".equals(fuhao)) {
        value = i - j;

    } else if ("*".equals(fuhao)) {
        value = i * j;

    } else if ("/".equals(fuhao)) {
        value = i / j;

    }
    return value;
}
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值