I’ve solved a few tasks from http://leetcode.com/ and going to publish my solutions,
So, first task is
Evaluate Reverse Polish Notation
The task description is :
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, –, *, /. Each operand may be an integer or another expression.
Some examples:
[“2”, “1”, “+”, “3”, “*”] -> ((2 + 1) * 3) -> 9
[“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6
Stop and think …
What do we have ? I can see some list of the numbers and operations, so, it looks like you or me added all items in LIFO style, like {2->1->+-> and so on}. OK, good, we can try to find data structure implemented that style. Each of us knows about Stack … OK, good, try to use that data structure in our implementation …
Firstly I’ve added calculator:
enum Operation{
PLUS("+"){
int calculate(int left, int right){
return left+right;
}
},MINUS("-"){
int calculate(int left, int right){
return left-right;
}
},MULTIPLY("*"){
int calculate(int left, int right){
return left*right;
}
},DIVIDE("/"){
int calculate(int left, int right){
return left/right;
}
};
String operation;
Operation(String op){
operation = op;
}
String getName(){
return operation;
}
abstract int calculate(int left, int right);
static Operation get(String val){
Operation[] operations = values();
for(Operation operation: operations){
if(operation.getName().equals(val))
return operation;
}
return null;
}
}public class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> result = new Stack<Integer>();
for (String token : tokens) {
Operation operation;
if(!isNum(token)){
operation = Operation.get(token);
int secondValue = result.pop();
result.push(operation.calculate(result.pop(),secondValue));
}else {
result.push( Integer.valueOf(token));
}
}
return result.pop();
}
boolean isNum(String data){
boolean isNum = true;
try{
Integer.parseInt(data);
}catch(Exception e){
isNum = false;
}
return isNum;
}
}





