括号题一般都是stack..
一开始想的是存入STACK的是SRING,然后POP出括号在构建新的NestedInteger放到另一个里面,但是操作起来费时费力。
后来猛然发现其实可以直接吧NestedInteger作为Object放入Stack里。
这种直接往堆顶元素里放的办法一定要注意。
然后就是edge cases多得一逼,一定要仔细,看了一刷的答案做的,有点后悔。其实有时候觉得麻烦的时候,基本就是思路错了,这个题也是看到一半觉得麻烦,然后发现果然思路错了。
public class Solution { public NestedInteger deserialize(String s) { if(s.length() == 0) return new NestedInteger(); Stackstk = new Stack (); int tempIndex = 0; if(!s.contains("[")) return new NestedInteger(Integer.valueOf(s)); for(int i = 0; i < s.length();i++) { char tempCh = s.charAt(i); if(tempCh == '[') { stk.push(new NestedInteger()); tempIndex = i + 1; } else if(tempCh == ',') { if( i != tempIndex) { int tempInt = Integer.valueOf(s.substring(tempIndex,i)); stk.peek().add(new NestedInteger(tempInt)); } tempIndex = i + 1; } else if(tempCh == ']') { if( i != tempIndex) { int tempInt = Integer.valueOf(s.substring(tempIndex,i)); stk.peek().add(new NestedInteger(tempInt)); } tempIndex = i + 1; NestedInteger tempOB = stk.pop(); if(!stk.isEmpty()) stk.peek().add(tempOB); else stk.push(tempOB); } // numbers else { } } return stk.pop(); }}
P.S. 有道云笔记各种崩溃,今天崩溃100次了,好像跟ALT有关。