/**
* // This is the interface that allows for creating nested lists.
* // You should not implement it, or speculate about its implementation
* class NestedInteger {
* public:
* // Constructor initializes an empty nested list.
* NestedInteger();
*
* // Constructor initializes a single integer.
* NestedInteger(int value);
*
* // 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;
*
* // Set this NestedInteger to hold a single integer.
* void setInteger(int value);
*
* // Set this NestedInteger to hold a nested list and adds a nested integer to it.
* void add(const NestedInteger &ni);
*
* // 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:
NestedInteger deserialize(string s)
{
stack<NestedInteger*> res;
string temp = "";
string num = "-0123456789";
for(int i = 0;i < s.size();i++)
{
if(num.find(s[i]) != -1)
{
temp += s[i];
}
else if(s[i] == ',')
{
if(temp != "")
{
NestedInteger* top = res.top();
top->add(NestedInteger(atoi(temp.c_str())));
res.pop();
res.push(top);
}
temp = "";
}
else if(s[i] =='[')
{
NestedInteger* list = new NestedInteger ();
res.push(list);
}
else
{
if(temp != "")
{
NestedInteger* top = res.top();
top->add(NestedInteger(atoi(temp.c_str())));
res.pop();
res.push(top);
}
temp = "";
NestedInteger* top = res.top();
res.pop();
if(res.empty())
{
return *top;
}
else
{
NestedInteger* p = res.top();
p->add(*top);
res.pop();
res.push(p);
}
}
}
return NestedInteger(atoi(temp.c_str()));
}
};
ps:没做出来,然后知道了可以直接用s.top() = 这样去更改,而不用向上述一样麻烦改动。
比如res.top->add(NestedInteger(stoi(temp)));