/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * public interface NestedInteger { * // Constructor initializes an empty nested list. * public NestedInteger(); * * // Constructor initializes a single integer. * public NestedInteger(int value); * * // @return true if this NestedInteger holds a single integer, rather than a nested list. * public boolean isInteger(); * * // @return the single integer that this NestedInteger holds, if it holds a single integer * // Return null if this NestedInteger holds a nested list * public Integer getInteger(); * * // Set this NestedInteger to hold a single integer. * public void setInteger(int value); * * // Set this NestedInteger to hold a nested list and adds a nested integer to it. * public void add(NestedInteger ni); * * // @return the nested list that this NestedInteger holds, if it holds a nested list * // Return null if this NestedInteger holds a single integer * public List<NestedInteger> getList(); * } */ publicclassSolution{ public NestedInteger deserialize(String s){ if (s == null || s.length() == 0) { returnnull; } if (s.charAt(0) != '[') { returnnew NestedInteger(Integer.parseInt(s)); } Stack<NestedInteger> stack = new Stack<>(); NestedInteger cur = new NestedInteger(); stack.push(cur); int start = 1; // 0 is [ for (int i = 1; i < s.length(); i++) { if (s.charAt(i) == '[') { NestedInteger ni = new NestedInteger(); stack.peek().add(ni); stack.push(ni); start = i + 1; } elseif (s.charAt(i) == ',' || s.charAt(i) == ']') { if (i > start) { Integer value = Integer.parseInt(s.substring(start, i)); stack.peek().add(new NestedInteger(value)); } start = i + 1; if (s.charAt(i) == ']') { stack.pop(); } } } return cur; } }