用非递归方法尝试解答这道题:耗时:1481ms
思路:
1、遍历原始数组a(已将a的数据复制,即num)
1.2、如果num子元素是空值则跳过此次循环
1.3、如果子元素是列表,则将子元素列表中的元素取出添加至临时列表b中
1.4、如果子元素是数字或其它暂不做处理,此处目的为收集列表嵌套层数
1.5、循环完毕一次,嵌套层数加1
1.6、将子元素列表中的元素集合b,作为新的数组num再次进行循环。
1.7、将子元素列表集合b集合,准备为下一次保存列表子元素集合使用
1.8、如果子元素集合num为空,即b在循环中未得到赋值(列表子元素中不存在列表集合),退出循环
2、重新配置num为原始列表集合
2.1、循环max_num(最大嵌套层数)次,将所有列表子元素取出
2.2、循环一次,减少一次循环次数。每次均取出列表子元素,直至循环结束
class Solution(object):
b = []
num = []
# @param nestedList a list, each element in the list
# can be a list or integer, for example [1,2,[1,2]]
# @return {int[]} a list of integer
def flatten(self, nestedList):
if type(nestedList) is not list:
self.b.append(nestedList)
return self.b
self.num = nestedList.copy() # 临时列表,将原始列表nestedList数据拷贝,用于计算
self.max_num=0 # 记录列表最多嵌套层数
while(len(self.num)!=0):
for i in self.num:
if i is None:
continue
elif type(i) is list:
self.b.extend(i)
self.max_num += 1
self.num = self.b
self.b = []
self.num = nestedList.copy() # 计算内层嵌套层数,临时使用
self.number = self.max_num # 调用函数函数时 用于保存更改循环次数
# 取出当前列表子元素为整数集合,并赋值新的列表元素,用于下一次循环
def foreach(num,max_num_):
for g in range(0,len(num)):
if num[g] is None:
continue
elif type(num[g]) is list:
self.b.extend(num[g])
else:
self.b.append(num[g])
self.number = self.number -1
self.num = self.b
self.b = []
for g in range(0,self.max_num):
foreach(self.num,self.number)
return self.num
用递归方法尝试解答这道题:1697 ms
class Solution(object):
b = []
# @param nestedList a list, each element in the list
# can be a list or integer, for example [1,2,[1,2]]
# @return {int[]} a list of integer
def flatten(self, nestedList):
if type(nestedList) is not list:
self.b.append(nestedList)
return self.b
def digui(self,num):
for j in num:
if type(j) is list:
digui(self,j)
elif j is None:
pass
else:
self.b.append(j)
for i in nestedList:
if type(i) is list:
digui(self,i)
elif i is None:
pass
else:
self.b.append(i)
return self.b