Given a list, each element in the list can be a list or integer. flatten it into a simply list with integers.
If the element in the given list is a list, it can contain list too.
Example 1: Input: [[1,1],2,[1,1]] Output: [1,1,2,1,1] Explanation: flatten it into a simply list with integers. Example 2: Input: [1,2,[1,2]] Output:[1,2,1,2] Explanation: flatten it into a simply list with integers. Example 3: Input: [4,[3,[2,[1]]]] Output:[4,3,2,1] Explanation: flatten it into a simply list with integers.
思路:
递归处理,每碰到列表就递归处理,每碰到一个数字就添加进答案数组中。
复杂度O(n)
/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * public interface NestedInteger { * * // @return true if this NestedInteger holds a single integer, * // rather than a nested list. * public boolean isInteger(); * * // @return the single integer that this NestedInteger holds, * // if it holds a single integer * // Return null if this NestedInteger holds a nested list * public Integer getInteger(); * * // @return the nested list that this NestedInteger holds, * // if it holds a nested list * // Return null if this NestedInteger holds a single integer * public List<NestedInteger> getList(); * } */ public class Solution { // @param nestedList a list of NestedInteger // @return a list of integer public List<Integer> flatten(List<NestedInteger> nestedList) { List<Integer> result = new ArrayList<Integer>(); for (NestedInteger ele : nestedList) if (ele.isInteger()) result.add(ele.getInteger()); else result.addAll(flatten(ele.getList())); return result; } }
非递归
public class Solution { // @param nestedList a list of NestedInteger // @return a list of integer public List<Integer> flatten(List<NestedInteger> nestedList) { boolean isFlat = true; List<NestedInteger> ls = nestedList; while (isFlat) { isFlat = false; List<NestedInteger> newLs = new ArrayList<>(); for (NestedInteger ni : ls) { if (ni.isInteger()) { newLs.add(ni); } else { newLs.addAll(ni.getList()); isFlat = true; } } ls = newLs; } List<Integer> r = new ArrayList<>(); for (NestedInteger ni : ls) { r.add(ni.getInteger()); } return r; } }
原文:https://www.cnblogs.com/FLAGyuri/p/12078466.html