您的位置:首页 > 编程语言 > Lua

LeetCode Evaluate Reverse Polish Notation

2015-08-22 01:10 411 查看
原题链接在这里:https://leetcode.com/problems/evaluate-reverse-polish-notation/

思路: 利用栈,遇到数字就压栈,遇到运算符就先pop() op2, 再pop() op1, 按op1 运算符op2 计算,得出结果压回栈,最后站内
剩下的就是结果。

Note: 1.String str to character, use str.toCharArray(), 转化成了一个char的array.

2. 若是负数,首字符也是负号,需要分类讨论

3. while loop, 别忘了j++.

AC Java:

public class Solution {
public int evalRPN(String[] tokens) {
if(tokens == null || tokens.length == 0){
return 0;
}
int res = 0;
Stack<Integer> stk = new Stack<Integer>();
for(int i = 0; i<tokens.length; i++){
char [] charArr = tokens[i].toCharArray();
if(Character.isDigit(charArr[0])){
int cur = (int)(charArr[0] - '0');
int j = 1;
while(j<charArr.length && Character.isDigit(charArr[j])){ //error
cur = cur*10 + (int)(charArr[j] - '0');
j++;    //error
}
stk.push(cur);
}else if(charArr.length > 1 && charArr[0] == '-' && Character.isDigit(charArr[1])){
int cur = (int)(charArr[1] - '0');
int j = 2;
while(j<charArr.length && Character.isDigit(charArr[j])){
cur = cur*10 + (int)(charArr[j] - '0');
j++;
}
stk.push(cur * (-1));
}else if(charArr[0] == '+'){
int op2 = stk.pop();
int op1 = stk.pop();
stk.push(op1+op2);
}else if(charArr.length == 1 && charArr[0] == '-' ){ //error
int op2 = stk.pop();
int op1 = stk.pop();
stk.push(op1-op2);
}else if(charArr[0] == '*'){
int op2 = stk.pop();
int op1 = stk.pop();
stk.push(op1*op2);
}else if(charArr[0] == '/'){
int op2 = stk.pop();
int op1 = stk.pop();
stk.push(op1/op2);
}else{
continue;
}
}
if(!stk.empty()){
res = stk.pop();
}
return res;
}
}


上面的写法显得啰嗦,可以做如下改动。

Note: 1.可以直接使用Integer.valueOf(str)来得到数值。

2. In "if" statement, 比较两个str时,不能使用 == operator,必须使用str1.equals(str2).

3. 当stack使用pop() 或者 peek()时需要先检查stack是否为空。

AC Java:

public class Solution {
public int evalRPN(String[] tokens) {
if(tokens == null || tokens.length == 0){
return 0;
}
int res = 0;
Stack<Integer> stk = new Stack<Integer>();
for(int i = 0; i<tokens.length; i++){
if(tokens[i].equals("+")){
int op2 = stk.pop();
int op1 = stk.pop();
stk.push(op1+op2);
}else if(tokens[i].equals("-")){
int op2 = stk.pop();
int op1 = stk.pop();
stk.push(op1-op2);
}else if(tokens[i].equals("*")){
int op2 = stk.pop();
int op1 = stk.pop();
stk.push(op1*op2);
}else if(tokens[i].equals("/")){
int op2 = stk.pop();
int op1 = stk.pop();
stk.push(op1/op2);
}else{
stk.push(Integer.valueOf(tokens[i]));
}
}
if(!stk.empty()){
res = stk.pop();
}
return res;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: