递归实现,判断字符串结束最好用i<len,而不是s[i]!='\0',这样不安全。可能出现runtime error
class Solution {
public:
NestedInteger deserialize(string s) {
bool level=false;
int len=s.size();
if(s[0]=='[')
{
level=true;
len-=2;
s=s.substr(1,len);
}
NestedInteger obj;
//for(int i=0;s[i]!='\0';i++)
for(int i=0;i<len;i++)
{
if(isdigit(s[i])||s[i]=='-')
{
string tmp="";
while(i<len&&(isdigit(s[i])||s[i]=='-'))
{
tmp+=s[i++];
}
int item=atoi(tmp.c_str());
NestedInteger ni(item);
if(level)
obj.add(ni);
else
obj.setInteger(item);
}
else if(s[i]=='[')
{
int cnt=1;
int sta=i;
i++;
while(i<len&&cnt!=0)
{
if(s[i]=='[')
cnt++;
else if(s[i]==']')
cnt--;
i++;
}
string tmp=s.substr(sta,i-sta);
NestedInteger cur=deserialize(tmp);
obj.add(cur);
}
}
return obj;
}
};