У меня была проблема с кодированием в качестве одного из процессов найма в компанию.В этой задаче кодирования одним из вопросов было обратное выражение.Например, 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;
}