Leetcode - 逆波兰表达式求值
程序员文章站
2022-06-17 19:48:04
...
解题思路:(C#)
通过一个栈实现,整体用一个while循环遍历整个字符串,当遇到不能把字符转换成整型时进行判断,同时将栈顶两个元素出栈进行相关运算,运算结果放入栈中继续进行遍历。
public class Solution {
public int EvalRPN(string[] tokens) {
Stack<int> s = new Stack<int>();
int i = 0;
while(i<tokens.Length)
{
int tmp = 0;
if(int.TryParse(tokens[i], out tmp))
{
s.Push(tmp);
}
else
{
var v2 = s.Pop();
var v1 = s.Pop();
if(tokens[i] == "+")
{
s.Push(v1+v2);
}
else if(tokens[i] == "/"){
s.Push(v1/v2);
}
else if(tokens[i] == "-")
{
s.Push(v1-v2);
}
else if(tokens[i] == "*")
{
s.Push(v1*v2);
}
}
i++;
}
return s.Pop();
}
}
要点:
- C#中的int.TryParse()方法
不同数据类型之间的转换,如果转换成功则返回true,否则返回false。
int.TryParse(string s,out int i)
参数: s是要转换的字符串,i 是将转换的结果赋值给i。
- s 为null
int.TryParse(null,out i)
false
- s 为空字符串
int.TryParse(“”,out i)
false
- s 字符串中带有空格。
int.TryParse(“1 “,out i)
true
int.TryParse(” 1”,out i)
true
int.TryParse(” 1 “,out i)
true
int.TryParse(“1 2”,out i)
false
- 非数字型字符串
false