y*****3 发帖数: 451 | 1 Evaluate Reverse Polish Notation那道题,超级容易的,我在Eclipse上都run通了,
但是leetcode却过不了一个最简单的case。实在是不明觉厉。。。
Submission Result: Runtime Error
Last executed input: ["0","3","/"]
public class Solution {
public int evalRPN(String[] tokens) {
java.util.Stack sTokens = new java.util.Stack();
for(int i = 0; i < tokens.length; i++)
{
if (tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" &&
tokens[i] != "/")
{
int currInt = Integer.parseInt(tokens[i]);
sTokens.push(currInt);
}
else
{
int int2 = sTokens.pop();
int int1 = sTokens.pop();
int int3 = 0;
if (tokens[i] == "+")
{
int3 = int1 + int2;
}
if (tokens[i] == "-")
{
int3 = int1-int2;
}
if (tokens[i] == "*")
{
int3 = int1 * int2;
}
if (tokens[i] == "/")
{
int3 = int1/int2;
}
sTokens.push(int3);
}
}
return sTokens.pop();
}
} |
J****3 发帖数: 427 | 2 3/0 没有意义了吧是
对于 - 和 / 应该是 int2/ int1, int2-int1 |
y*****3 发帖数: 451 | 3 怎么可能呢,你再仔细看看,我这里是int2=3, int1=0, Eclipse上都通过的了
【在 J****3 的大作中提到】 : 3/0 没有意义了吧是 : 对于 - 和 / 应该是 int2/ int1, int2-int1
|
D******y 发帖数: 316 | 4 但是问题是lz设的int2是第一次pop,int1是第二次pop,所以order应该没问题。
anyway,我也是类似的code在eclips能return 0,在leetcode上面就是runtime error
【在 J****3 的大作中提到】 : 3/0 没有意义了吧是 : 对于 - 和 / 应该是 int2/ int1, int2-int1
|
D******y 发帖数: 316 | 5 搭车问一下,我有一次电面时候遇到这个题,interviewer指出两次pop()不好,大概意
思好像不要重复call一个function之类的我没太听懂,这是涉及到style得问题么?先
谢过了。 |
J****3 发帖数: 427 | 6 sorry 你是对的
【在 y*****3 的大作中提到】 : 怎么可能呢,你再仔细看看,我这里是int2=3, int1=0, Eclipse上都通过的了
|
J****3 发帖数: 427 | 7 真给跪了,不知道是啥问题
【在 J****3 的大作中提到】 : sorry 你是对的
|
s***e 发帖数: 403 | 8 其实可以优化一下。
只pop第一个,然后修改栈顶的数据。
【在 D******y 的大作中提到】 : 搭车问一下,我有一次电面时候遇到这个题,interviewer指出两次pop()不好,大概意 : 思好像不要重复call一个function之类的我没太听懂,这是涉及到style得问题么?先 : 谢过了。
|
d****n 发帖数: 397 | 9 class Solution {
public:
int evalRPN(vector &tokens) {
int n;
n=tokens.size();
return eval(tokens,0,n-1);
}
int eval(vector& tokens, int i, int j) {
int k,l,n,v1,v2,v,np,nn;
n=j-i+1;
np=0;
nn=0;
if(n==1) return stringtovalue(tokens[i]);
else {
for(l=j-1;l>=i;l--) {
if(tokens[l]=="+"||tokens[l]=="-"||tokens[l]=="*"||tokens[l]
=="/") np++;
else nn++;
if(nn==np+1) break;
}
v1=eval(tokens,i,l-1);
v2=eval(tokens,l,j-1);
if(tokens[j]=="+") return v1+v2;
else if(tokens[j]=="-") return v1-v2;
else if(tokens[j]=="*") return v1*v2;
else return v1/v2;
}
}
int stringtovalue(string s) {
int v,n,i;
n=s.size();
v=0;
if(s[0]=='-') {
for(i=1;i
v=v*10+(s[i]-'0');
}
v=-v;
}
else {
for(i=0;i
v=v*10+(s[i]-'0');
}
}
return v;
}
};
&
【在 y*****3 的大作中提到】 : Evaluate Reverse Polish Notation那道题,超级容易的,我在Eclipse上都run通了, : 但是leetcode却过不了一个最简单的case。实在是不明觉厉。。。 : Submission Result: Runtime Error : Last executed input: ["0","3","/"] : public class Solution { : public int evalRPN(String[] tokens) { : java.util.Stack sTokens = new java.util.Stack(); : for(int i = 0; i < tokens.length; i++) : { : if (tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" &&
|
C*******n 发帖数: 24 | 10 You should use string.equals("+"); NOT ==
Then you can pass it. |
h*********o 发帖数: 230 | 11 你不能用 “==”
要用 equals()
替换一下就通过了
&
【在 y*****3 的大作中提到】 : Evaluate Reverse Polish Notation那道题,超级容易的,我在Eclipse上都run通了, : 但是leetcode却过不了一个最简单的case。实在是不明觉厉。。。 : Submission Result: Runtime Error : Last executed input: ["0","3","/"] : public class Solution { : public int evalRPN(String[] tokens) { : java.util.Stack sTokens = new java.util.Stack(); : for(int i = 0; i < tokens.length; i++) : { : if (tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" &&
|
y*****3 发帖数: 451 | 12 啊。。。又忘了,谢谢楼上各位!!写惯了C#了,真是不习惯java的各种烂。从syntax
到API,从compiler到IDE。。。和C#比,java简直就是一个大屎坑...待我忙过这阵子
,好好写个帖子总结下java的各种烂。。 |
l*n 发帖数: 529 | 13 库函数不一定支持直接改数据吧。这种优化肯定算micro-optimization了。
【在 s***e 的大作中提到】 : 其实可以优化一下。 : 只pop第一个,然后修改栈顶的数据。
|