本文準(zhǔn)備講解1個(gè)算法編程問題瘾敢, 這個(gè)算法編程問題來自LeetCode平臺(tái)咙鞍。不了解.LeetCode平臺(tái)的讀者可以閱讀筆者文章(在線編程平臺(tái)推薦-LeetCode)箫柳。問題的英文版本描述如下:
Flatten Nested List Iterator
Given a nested list of integers, implement an iterator to flatten it.
Each element is either an integer, or a list -- whose elements may also be integers or other lists.
Example 1:
Given the list[[1,1],2,[1,1]],
By calling?next?repeatedly until?hasNext?returns false, the order of elements returned by?next?should be:[1,1,2,1,1].
Example 2:
Given the list[1,[4,[6]]],
By calling?next?repeatedly until?has Next?returns false, the order of elements returned by?next?should be:[1,4,6].
問題的中文版本描述:
處理鏈表
給定一個(gè)列表镀脂,該列表中的每個(gè)元素要么是個(gè)列表,要么是整數(shù)酒觅。將其變成一個(gè)只包含整數(shù)的簡(jiǎn)單列表撮执。
注意事項(xiàng)
如果給定的列表中的元素本身也是一個(gè)列表,那么該元素也可以包含列表舷丹。
樣例
給定[1,2,[1,2]]抒钱,返回[1,2,1,2]。
給定[4,[3,[2,[1]]]]颜凯,返回[4,3,2,1]谋币。
該問題要求對(duì)復(fù)合結(jié)構(gòu)列表進(jìn)行處理, 列表的元素可能為整數(shù),也可能為整數(shù)症概。以目標(biāo)列表[1,2,[1,2]]為例瑞信,首個(gè)元素為整數(shù)1,第2個(gè)元素為整數(shù)2穴豫,后1個(gè)元素為列表 [1,2]凡简。列表 [1,2] 又含有2個(gè)整數(shù)元素。核心的算法需要用到遞歸處理:以目標(biāo)列表 [4,[3,[2,[1]]]] 為例精肃,簡(jiǎn)單說明算法秤涩。首先處理目標(biāo)列表 [4,[3,[2,[1]]]],找出第1個(gè)整數(shù)元素并將該元素放入輸出列表司抱。處理目標(biāo)列表 [4,[3,[2,[1]]]]筐眷,找出第2個(gè)列表元素 [3,[2,[1]]] 。處理目標(biāo)列表 [3,[2,[1]]]习柠,找出第1個(gè)整數(shù)元素并將該元素放入輸出列表匀谣。處理目標(biāo)列表 [3,[2,[1]]],找出第2個(gè)列表元素 [2,[1]]资溃。處理目標(biāo)列表 [2,[1]]武翎,找出第1個(gè)整數(shù)元素并將該元素放入輸出列表。處理目標(biāo)列表 [2,[1]]溶锭,找出第2個(gè)列表元素 [1]宝恶。處理目標(biāo)列表 [1],找出第1個(gè)整數(shù)元素并將該元素放入輸出列表趴捅。
核心算法部分內(nèi)容見下圖: