專欄 | 九章演算法
網址 | www.jiuzhang.com
題目描述
有一個以字串形式給出的巢狀陣列,編寫一個解析器使其反序列化。
陣列的元素為整數或相同形式的陣列。
注意:你可以認為這個字串遵從如下規則:
字串不為空
字串不包含空格
字串僅包含數字0-9,[,-,],和逗號“,”。
樣例
樣例一
給定字串s = “234”,返回一個只包含一個整數234的NestedInteger物件。
樣例二
給定字串s = “[123,[456,[789]]]”,返回一個包含兩個元素的NestedInteger物件:
一個整數123
一個NestedInteger的List,其中包含兩個元素:
一個整數456
一個NestedInteger的List,其中包含一個元素:
一個整數789
解題思路分析
這屬於一道中等難度的字串處理問題,主要難點在於對於層次的邏輯思考,每一種情況都不能漏。
簡單分析一下,此題需要一層一層進行剖析,到達最內層後結束。對於這種層次題目很明顯適合兩種解法,一種是用Stack,一種是遞迴。;兩種解法只是程式碼寫法上的區別,其實本質思想上並沒有差別(Stack可以認為就是模擬遞迴),所以參考程式只給出了一種用Stack的解法,遞迴類似。
深入分析:
在字串中如果遇到“[”符號,便需要新開一層(即需要壓棧)
在字串中如果遇到“]”符號,表示此層結束(即需要彈棧)。但是在一層結束時,因為上一層要包含彈出的這一層,所以需要將其加入到其上一層(彈棧後的棧頂)
在字串中如果遇到“,”時,只需要處理前面是數字的情況(因為前面是陣列的情況在遇到“]”時便處理過了),即把數字加入到當前層(即棧頂層)即可。
注意一個特殊情況:只包含一個數字(如樣例一)的情況,需要額外處理(因為其沒有任何符號)。
參考程式碼
面試官角度分析
這道題不難於演算法,能做到不遺漏情況,各層邏輯清晰,即可得到hire。
LintCode相關練習題
推薦閱讀:
- 網申時, 是否需要 cover letter (求職信) ?
- 2017年最受歡迎的程式語言有哪些?
- HR 揭祕: 10 個掛掉 Offer 的原因
- Google offer 如何談判?聽聽 Google recruiter 怎麼說!
- 面試遇到做過的題怎麼辦?
- Snapchat 面經 | LA 總部面試體驗
- 面試前如何瞭解一家IT企業?試試官方技術部落格!
- 網際網路歷史上最有創意的 7 份簡歷
- 利用 Twitter 找工作 | 如何尋找招聘資訊
- Facebook 電面+Onsite面經
歡迎關注我的微信公眾號:九章演算法(ninechapter)。
精英程式設計師交流社群,定期釋出面試題、面試技巧、求職資訊等