20. 有效的括号
有效的括号
需要注意数值越界问题,比如一开始就出现个右括号
func isValid(s string) bool {
stack := make([]byte,0)
for i := 0; i < len(s); i++{
if s[i] == '(' || s[i] == '[' || s[i] == '{'{
stack = append(stack,s[i])
continue
}
if s[i] == ')'{
if len(stack) != 0 && stack[len(stack) - 1] == '('{
stack = stack[:len(stack) - 1]
continue
}else{
return false
}
}
if s[i] == ']'{
if len(stack) != 0 && stack[len(stack) - 1] == '['{
stack = stack[:len(stack) - 1]
continue
}else{
return false
}
}
if s[i] == '}'{
if len(stack) != 0 && stack[len(stack) - 1] == '{'{
stack = stack[:len(stack) - 1]
continue
}else{
return false
}
}
}
if len(stack) != 0 {
return false
}
return true
}
1047. 删除字符串中的所有相邻重复项
删除字符串中的所有相邻重复项
利用栈进行比较即可
150. 逆波兰表达式求值
逆波兰表达式求值
思路简单,但是go的pow居然是float64类型,所以需要进行数值转换才可以
func evalRPN(tokens []string) int {
stcak := make([]int, 0)
for i := 0; i < len(tokens); i++{
if tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" && tokens[i] != "/"{
stcak = append(stcak, String2int(tokens[i]))
}else{
right := stcak[len(stcak) - 1]
left := stcak[len(stcak) - 2]
stcak = stcak[: len(stcak) - 2]
stcak = append(stcak,operater(left, right,tokens[i]))
}
}
return stcak[0]
//return String2int("-11")
}
func operater( left, right int, fun string) int{
x := 0
switch fun{
case "+" : x = left + right
case "-" : x = left - right
case "*" : x = left * right
case "/" : x = left / right
}
return x
}
func String2int(str string) int{
sum := 0
c := 0
for i := 0 ; i < len(str); i++{
if str[i] == '-'{
c = 1
continue
}
sum += int(str[i] - '0') * int(math.Pow(10.0,float64(len(str) - i - 1)))
}
if c == 1{
sum *= -1
}
return sum
}
本文介绍了使用栈数据结构解决两个编程问题:检查一个字符串是否为有效的括号组合以及计算逆波兰表达式的值。在有效括号问题中,栈用于存储左括号,以便匹配右括号。在逆波兰表达式求值问题中,栈帮助管理数字和运算符,实现计算。注意到了Go语言中浮点数的pow函数在整数运算时需要转换类型。

被折叠的 条评论
为什么被折叠?



