9.9 360 修复方程

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < n; i++) {
            String s = br.readLine();
            res.append(invoke(s)?"Yes":"No").append("\n");
        }
        System.out.println(res);
    }

    static boolean invoke(String s){
        if(handler(s)) return true;
        boolean flag=false;
        //第一层循环找插入字符位置
        for (int i = 0; i <=s.length() ; i++) {
            //第二层循环插入0-9
            for (int j = 0; j < 10; j++) {
                flag|=handler(s.substring(0,i)+j+s.substring(i));
            }
        }
        return flag;
    }
    //把等式拆开,比较两边相等
    static boolean handler(String s) {
        int i = s.indexOf('=');
        return execute(s.substring(0,i))==execute(s.substring(i+1));
    }
    //计算单一的式子(模拟计算器,只有乘加,所以比较简单)
    static int execute(String s) {
        char[] chars = s.toCharArray();
        int tem = chars[0] - '0';
        Stack<Integer> numstack = new Stack<>();
        Stack<Character> charstack = new Stack<>();
        for (int i = 1; i < s.length(); i++) {
            char c = chars[i];
            if (Character.isDigit(c)) {
                tem = tem * 10 + c - '0';
            } else {
                numstack.push(tem);
                tem = 0;
                if (c == '+') {
                    while (!charstack.empty() && charstack.peek() == '*') {
                        charstack.pop();
                        numstack.push(numstack.pop() * numstack.pop());
                    }
                }
                charstack.push(c);
            }
        }
        numstack.push(tem);
        while (!charstack.empty()) {
            Character pop = charstack.pop();
            if(pop=='+'){
                numstack.push(numstack.pop() + numstack.pop());
            }else {
                numstack.push(numstack.pop() * numstack.pop());
            }
        }
        return numstack.pop();
    }
}

#360笔试#
全部评论
楼主厉害啊
点赞 回复 分享
发布于 2022-09-25 19:34 陕西

相关推荐

03-26 13:04
已编辑
电子科技大学 算法工程师
xiaowl:你这个简历“条目上”都比较有深度性,但是实际上面试官又没法很好的评估你是怎么达到很多看上去很厉害的结果的。要避免一些看上去很厉害的包装,比如高效的内存复用策略的表达,如果仅是简单的一些内存共享机制,而且面试上也没有深挖的空间,就不要这样表达。比如,工程化模式本质上可能就是定义了一些abstract class,那也就没特别多值得讲的内容。建议简历上应该侧重那些你花了大量时间和精力解决、研究的问题,不要过分追求“丰富”,而是关注在技术深入度、问题解决能力的表现上。
没有实习经历,还有机会进...
点赞 评论 收藏
分享
04-01 12:25
中南大学 Java
枯基Evan_:腾讯一面写过11次的题目没写出来
点赞 评论 收藏
分享
评论
7
2
分享

创作者周榜

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