点击上方蓝字,关注:无量测试之道
编辑 | 小 晴
1.开篇问题:有效的括号[1]
假如如今要你来解这道题,你会想到怎样的解法了?
2.如何理解“栈”?

从栈的操做特性上来看,栈是一种“操做受限”的线性表,只容许在一端插入和删除数据。
栈的定义
[2]
:
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操做的线性表。这一端被称为栈顶,相对地,把另外一端称为栈底。向一个栈插入新元素又称做进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称做出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
3.如何实现栈
swift
语言来编写代码,读者朋友们不要由于编程语言不一样而有畏难情绪,重要的是思惟和逻辑,语言只是表达方式。你能够用你本身熟悉的语言来表达你的逻辑,能够先试着写一写】
class Stack {
//初始化数组
var datas = [Int]()
//出栈操做
func pop() -> Int? {
return datas.popLast()
}
//入栈操做
func push(obj: Int) {
datas.append(obj)
}
//栈顶对象
func top() -> Int? {
return datas.last
}
}
4.栈在实际开发过程当中的应用
栈在函数调用中的应用python
func calculate() {
let a = 3
let b = 5
var result = 0
result = add(x: a, y: b)
print(result)
}
func add(x: Int, y: Int) -> Int {
var sum= 0
sum = x + y
return sum
}

递归算法
[3]
F(0) =0,
F(1) =1,
F(n) = F(n-1)+F(n-2)(n≥2,n∈N*)
F(n)
时须要先计算
F(n-1)
和
F(n-2)
计算
F(n-1)
时须要先计算
F(n-2)
和
F(n-3)
计算
F(n-2)
时须要先计算
F(n-2)
和
F(n-3)
···
最后的效果是,会有不少中间值压入栈中,这也是为何,当
n
很大的时候,会很是消耗内存。因此在实际的开发中,掌握这些底层的开发基础,会有助你选择合适的技术方案。
5.概念区分:数据结构堆栈 VS 内存中的堆栈
6.解答开篇
-
1.若是开始就是右括号 )、]、}
,很明显不合法,直接返回false -
2.若是是左括号 (、[、{
,就压栈。若是是右括号)、]、}
,在stack有值的状况下与栈顶元素匹配,匹配经过则栈顶元素出栈,不然直接返回false。
swift
解题的实现代码
class Solution {
func isValid(_ s: String) -> Bool {
if s.count == 0 { return false }
var stack = [String]()
let dict: [String:String] = ["(":")","[":"]","{":"}"]
for c in s {
if dict.keys.contains(c.description) {
stack.append(c.description) //若是是左括号就入栈
}else {
if stack.count > 0 && c.description == dict[stack.last!] { //若是是右括号,而且匹配就出栈
stack.removeLast()
}else {
return false
}
}
}
return stack.count == 0
}
}
[4]
的解法
7.内容总结
n
值很大地时候,会有大量的临时变量被压如栈中而消耗内存。以及最后经过栈的核心思想来解LeetCode中比较经典的算法题。
参考资料:
-
1.有效的括号: https://leetcode-cn.com/problems/valid-parentheses
2.栈的定义:编程
https://baike.baidu.com/item/%E6%A0%88/12808149?fr=aladdinswift
3.斐波那契数列:数组
https://baike.baidu.com/item/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97/99145?fr=aladdin 微信
4.python语言实现:数据结构
https://leetcode-cn.com/problems/valid-parentheses/solution/valid-parentheses-fu-zhu-zhan-fa-by-jin407891080/app
若是今天的分享对你有帮助的话,请坚决果断:分享、点赞、在看、收藏呀~
你的鼓励将会是我创做的最大动力。编程语言
点个赞,点个在看再走吧~~~编辑器

本文分享自微信公众号 - 无量测试之道(gh_858a1aa25a6d)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。