Инвертировать входное выражение, используя стеки - PullRequest
0 голосов
/ 24 сентября 2018

У меня была проблема с кодированием в качестве одного из процессов найма в компанию.В этой задаче кодирования одним из вопросов было обратное выражение.Например, Input: 14-3 * 2/5 Output: 5/2 * 3-14

Я использовал стек, чтобы поместить каждое число, скажем, 14 или 3, и выражения, а затем вытолкнул его снова, чтобы сформировать вывод.

Формат ввода: num op num op num op num Таким образом, нам не нужно беспокоиться о том, что ввод равен -2.число может быть от -10 ^ 16 до 10 ^ 16.Я имел дело со строками полностью, поэтому даже если число превысит предел 10 ^ 16, у моего алгоритма не возникнет никаких проблем.

Мой алгоритм прошел 7 тестовых случаев и завершился неудачей в 2 из них.Я не мог понять, каким будет угловой корпус.Я не мог видеть тестовые случаи также.Любая идея, что это может быть.Я знаю, что информации недостаточно, но, к сожалению, у меня ее тоже нет.

// Complete the reverse function below.
static String reverse(String expression) {
    expression = expression.trim();
    if(expression == ""){
            return "";
        }
        Stack<String> stack = new Stack<String>();
        String num = "";
        for(int i=0; i<expression.length(); i++){
            char c = expression.charAt(i);
            if(c==' '){
                continue;
            }
            if(c == '+' || c == '-' || c == '*' || c == '/'){
                if(num != "") {
                    stack.push(num);
                }
                num = "";
                stack.push(Character.toString(c));
            } else{
                num += c;
            }
        }
        if(num != "") {
            stack.push(num);
        }

        String revExp = "";
        while(! stack.empty()){
            revExp = revExp + stack.pop();
        }

        return revExp;

}
...