點擊上方藍字,關注:無量測試之道
編輯 | 小 晴
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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。