这是群里一个朋友发的,好像是他去阿里的面试题。我捉摸了一把,用静态语言写确实不太友好。所以用JS写了一把,实现了效果,但是个人其实不喜欢递归,因为总觉得会栈溢出。
先放一个递归写法:
/**
* [[1], [3, 2, 'a'], ['x', 'y', 5]]
* @param arr
*/
function parseArrayLevels(arr) {
let result = []
let f = (deep, e) => {
if (result.length <= deep) {
result.push([])
}
if (Array.isArray(e)) {
e.forEach(a => {
f(deep + 1, a)
})
} else {
result[deep].push(e)
}
}
arr.forEach(e => f(0, e))
return result
}
console.log(parseArrayLevels([1, [3, ["x", "y"], 2] , [[5], "a"]]));
至于非递归,应该要借助另一个集合,空间复杂度高一些。