LeetCode.385 Mini Parser
来源:互联网 发布:datediff mysql 编辑:程序博客网 时间:2024/05/22 05:10
题目:
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.分析1(递归实现-推荐):
/** * // 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(); * } */class Solution { public NestedInteger deserialize(String s) { //给定字符串,实现其特定返回类型 //思路:递归实现,对于属于同一层的直接添加,非同一层的递归将其中元素添加 NestedInteger nest=new NestedInteger(); //防止空串 if(s.length()==0||s==null) return nest; if(s.charAt(0)!='['){ //防止只有数字的情况 nest.setInteger(Integer.parseInt(s)); return nest; } //空串[] if(s.length()==2) { return nest; } int start=1; int layer=1; for(int i=1;i<s.length();i++){ char ch=s.charAt(i); if(layer==1&&(ch==','||i==s.length()-1)){ //递归实现其中的子集合 nest.add(deserialize(s.substring(start,i))); start=i+1; } if(ch=='['){ //新的一层 layer++; }else if(ch==']'){ layer--; } } return nest; }}
分析2(stack实现-易理解):
/** * // 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(); * } */class Solution { public NestedInteger deserialize(String s) { //给定字符串,实现其特定返回类型 //思路:对整个字符串拆分需要判断当前是否是一个子集还是数字。同341使用stack if(s.charAt(0)!='['){ //防止只有一个数字的情况 return new NestedInteger(Integer.valueOf(s)); } //对字符串遍历 Stack<NestedInteger> stack=new Stack<NestedInteger>(); NestedInteger cur=null; //用来表示标识对一个元素完成读取 int high=0; for(int i=0;i<s.length();i++){ char ch=s.charAt(i); if(ch=='['){ //当到下一个元素之前,判断前面一个元素是否满足(大的范围) if(cur!=null){ stack.push(cur); } cur=new NestedInteger(); high=i+1; }else if(ch==']'){ //对字符串截断 String str=s.substring(high,i); //判断该字符串 if(!str.isEmpty()){ cur.add(new NestedInteger(Integer.valueOf(str))); } if(!stack.isEmpty()){ //同一个范围的,在一个NestedInteger集合中 NestedInteger pop=stack.pop(); pop.add(cur); cur=pop; } high=i+1; }else if(ch==','){ //判断是大范围的子集,还是小范围里面的子集 if(s.charAt(i-1)!=']'){ //大范围 String str=s.substring(high,i); //直接添加进行 cur.add(new NestedInteger(Integer.valueOf(str))); } //重新修改游标 high=i+1; } } return cur; }}
阅读全文
0 0
- leetcode 385 Mini Parser
- leetcode 385 Mini Parser
- LeetCode.385 Mini Parser
- Leetcode 385. Mini Parser
- 【Leetcode】Mini Parser
- [leetcode] 385. Mini Parser
- LeetCode:385. Mini Parser
- Leetcode 385. Mini Parser
- Leetcode 385. Mini Parser
- Leetcode 385. Mini Parser
- Leetcode | Mini Parser
- [LeetCode]385. Mini Parser
- [leetcode]385. Mini Parser
- leetcode 385. Mini Parser
- LeetCode—385. Mini Parser
- LeetCode Mini Parser(栈操作)
- Leetcode——385. Mini Parser
- [leetCode刷题笔记]385. Mini Parser
- Jekins之——自动构建部署java maven项目(jdk1.7+tomcat7.0+jenkins2.19.3)
- centos忘记密码的解决方法
- Retrofit源码解析(一)
- Ionic 项目调试工具
- Java中的重写和重载区别
- LeetCode.385 Mini Parser
- Zookeeper集群的安装与配置
- 反射
- iOS页面消息角标展示数字
- 知识付费市场巨大,拿什么内容付费工具去实现知识变现?
- PULPino在zedboard上的下载、测试
- Ecplise安装FindBugs插件
- 代码三神器?
- echarts的x轴y轴的颜色改变