LeetCode385. 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.

参考资料:here

参考资料讲的非常好。

对于这种拥有重复结构的字符串的处理,很容易想到使用递归的方式解决。

在使用了递归后,可以使用栈来模拟递归的过程。

class Solution {
public:
	NestedInteger deserialize(string s) {
		if (s.empty()) return NestedInteger();
		if (s[0] != '[') return NestedInteger(stoi(s));

		stack<NestedInteger> ans;
		int start = 1;
		for (int i = 0; i < s.size(); i++) {
			if (s[i] == '[') {
				ans.push(NestedInteger());
				start = i + 1;
			}
			else if(s[i] == ',' || s[i] == ']') {
				if (i > start) ans.top().add(stoi(s.substr(start, i - start)));
				start = i + 1;
				if (s[i] == ']') {
                    if(ans.size()>1){
                        NestedInteger tmp = ans.top();
					    ans.pop();
					    ans.top().add(tmp);
                    }

				}
			}
		}
		return ans.top();
	}
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值