| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | /** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * type NestedInteger struct { * } * * // Return true if this NestedInteger holds a single integer, rather than a nested list. * func (n NestedInteger) IsInteger() bool {} * * // 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 * // So before calling this method, you should have a check * func (n NestedInteger) GetInteger() int {} * * // Set this NestedInteger to hold a single integer. * func (n *NestedInteger) SetInteger(value int) {} * * // Set this NestedInteger to hold a nested list and adds a nested integer to it. * func (n *NestedInteger) Add(elem NestedInteger) {} * * // Return the nested list that this NestedInteger holds, if it holds a nested list * // The list length is zero if this NestedInteger holds a single integer * // You can access NestedInteger's List element directly if you want to modify it * func (n NestedInteger) GetList() []*NestedInteger {} */func deserialize(s string) *NestedInteger {	ni := &NestedInteger{}	if s == "[]" {		return ni	}	n := len(s)	if s[0] != '[' {		i, _ := strconv.Atoi(s)		ni.SetInteger(i)		return ni	}	prev, comma := 1, nextComma(s, 1, n-1)	for comma != -1 {		ni.Add(*deserialize(s[prev:comma]))		prev = comma + 1		comma = nextComma(s, prev, n-1)	}	ni.Add(*deserialize(s[prev : n-1]))	return ni}func nextComma(s string, beg, end int) int {	for cnt, i := 0, beg; i < end; i++ {		if s[i] == '[' {			cnt++		} else if s[i] == ']' {			cnt--		}		if cnt == 0 && s[i] == ',' {			return i		}	}	return -1}
 |