專欄 | 九章算法
網址 | www.jiuzhang.com程序員
題目描述面試
有一個以字符串形式給出的嵌套數組,編寫一個解析器使其反序列化。
數組的元素爲整數或相同形式的數組。
注意:你能夠認爲這個字符串聽從以下規則:
字符串不爲空
字符串不包含空格
字符串僅包含數字0-9,[,-,],和逗號「,」。算法
樣例編程
樣例一
給定字符串s = 「234」,返回一個只包含一個整數234的NestedInteger對象。數組
樣例二
給定字符串s = 「[123,[456,[789]]]」,返回一個包含兩個元素的NestedInteger對象:
一個整數123
一個NestedInteger的List,其中包含兩個元素:
一個整數456
一個NestedInteger的List,其中包含一個元素:
一個整數789微信
解題思路分析編程語言
這屬於一道中等難度的字符串處理問題,主要難點在於對於層次的邏輯思考,每一種狀況都不能漏。post
簡單分析一下,此題須要一層一層進行剖析,到達最內層後結束。對於這種層次題目很明顯適合兩種解法,一種是用Stack,一種是遞歸。;兩種解法只是代碼寫法上的區別,其實本質思想上並無差異(Stack能夠認爲就是模擬遞歸),因此參考程序只給出了一種用Stack的解法,遞歸相似。ui
深刻分析:
在字符串中若是遇到「[」符號,便須要新開一層(即須要壓棧)
在字符串中若是遇到「]」符號,表示此層結束(即須要彈棧)。可是在一層結束時,由於上一層要包含彈出的這一層,因此須要將其加入到其上一層(彈棧後的棧頂)
在字符串中若是遇到「,」時,只須要處理前面是數字的狀況(由於前面是數組的狀況在遇到「]」時便處理過了),即把數字加入到當前層(即棧頂層)便可。
注意一個特殊狀況:只包含一個數字(如樣例一)的狀況,須要額外處理(由於其沒有任何符號)。3d
參考代碼
面試官角度分析
這道題不難於算法,能作到不遺漏狀況,各層邏輯清晰,便可獲得hire。
LintCode相關練習題
推薦閱讀: