# LeetCode Mini Parser

LeetCode Mini Parser

Given a nested list of integers represented as a string, implement a parser to deserialize it.

Each element is either an integer, or a list -- whose elements may also be integers or other lists.

Note: You may assume that the string is well-formed:

• String is non-empty.
• String does not contain white spaces.
• String contains only digits `0-9`, `[`, `-` `,`, `]`.

Example 1:

```Given s = "324",

You should return a NestedInteger object which contains a single integer 324.
```

Example 2:

```Given s = "[123,[456,[789]]]",

Return a NestedInteger object containing a nested list with 2 elements:

1. An integer containing value 123.
2. A nested list containing two elements:
i.  An integer containing value 456.
ii. A nested list with one element:
a. An integer containing value 789.```

```class Solution {
public:
NestedInteger deserialize(string s) {
auto isnumber = [](char c) {return c == '-' || isdigit(c); };
stack<NestedInteger> stk;
stk.push(NestedInteger());
for (auto it = s.begin(); it != s.end();) {
if (isnumber(*it)) {
auto it2 = find_if_not(it, s.end(), isnumber);
int v = stoi(string(it, it2));
it = it2;
}
else {
if (*it == '[') {
stk.push(NestedInteger());
}
else if (*it == ']') {
NestedInteger tmp = stk.top();
stk.pop();
}
++it;
}
}
return stk.top().getList().front();
}
};
```

```class Solution {
private:
NestedInteger deserialize(istringstream &in) {
int number;
if (in >> number)
return NestedInteger(number);
in.clear();
in.get();
NestedInteger list;
while (in.peek() != ']') {
if (in.peek() == ',')in.get();
}
in.get();
return list;
}
public:
NestedInteger deserialize(string s) {
istringstream in(s);
return deserialize(in);
}
};
```