题目描述:
This problem is in a contest:
Career Fair Warm Up I . Submit your code and see your ranking!
Given a list, each element in the list can be a list or integer. flatten it into a simply list with integers.
Notice
If the element in the given list is a list, it can contain list too.
Example
Given [1,2,[1,2]]
, return [1,2,1,2]
.
Given [4,[3,[2,[1]]]]
, return [4,3,2,1]
.
Challenge
题目思路:
Do it in non-recursive.
non-recursive我不会做。。下面是我recursive的做法:
Mycode(AC = 489ms):
/**
* // This is the interface that allows for creating nested lists.
* // You should not implement it, or speculate about its implementation
* class NestedInteger {
* public:
* // Return true if this NestedInteger holds a single integer,
* // rather than a nested list.
* bool isInteger() const;
*
* // Return the single integer that this NestedInteger holds,
* // if it holds a single integer
* // The result is undefined if this NestedInteger holds a nested list
* int getInteger() const;
*
* // Return the nested list that this NestedInteger holds,
* // if it holds a nested list
* // The result is undefined if this NestedInteger holds a single integer
* const vector<NestedInteger> &getList() const;
* };
*/
class Solution {
public:
// @param nestedList a list of NestedInteger
// @return a list of integer
vector<int> flatten(vector<NestedInteger> &nestedList) {
// Write your code here
vector<int> ans;
if (nestedList.size() == 0) {
return ans;
}
else {
for (int i = 0; i < nestedList.size(); i++) {
if (nestedList[i].isInteger()) {
ans.push_back(nestedList[i].getInteger());
}
else {
vector<NestedInteger> rest = nestedList[i].getList();
vector<int> r = flatten(rest);
for (int j = 0; j < r.size(); j++) {
ans.push_back(r[j]);
}
}
}
}
}
};