87.Summary Ranges
2016-01-25 16:26
323 查看
Given a sorted integer array without duplicates, return the summary of its ranges.
For example, given
分析:根据给定的有序的数组,找出各个连续段的范围,以list的形式返回。
falg为false时表示当前的数组单个连续,为true时表示多个连续.
当有多个数字连续时,则在当前String中追加"->"和这一阶段的最后一个元素。
当时单个数字时,则不用加 "->"。
仔细分析,认真代码。
For example, given
[0,1,2,4,5,7], return
["0->2","4->5","7"].
分析:根据给定的有序的数组,找出各个连续段的范围,以list的形式返回。
falg为false时表示当前的数组单个连续,为true时表示多个连续.
当有多个数字连续时,则在当前String中追加"->"和这一阶段的最后一个元素。
当时单个数字时,则不用加 "->"。
/** * 根据给定的有序的数组,找出各个连续段的范围,以list的形式返回。 * falg为false时表示当前的数组单个连续,为true时表示多个连续. * 当有多个数字连续时,则在当前String中追加"->"和这一阶段的最后一个元素。 * 当时单个数字时,则不用加 "->"。 */ public List<String> summaryRanges(int[] nums) { List<String> list = new ArrayList<String>(); int len = nums.length; if(len == 0){ return list; } boolean flag = false;//falg为false时表示当前的数组单个连续,为true时表示多个连续 StringBuffer sb = new StringBuffer();/*存储每一段的内容*/ for(int i=0;i<len;){ sb.append(nums[i]);//找到sb开头的元素 /*找下一个连续的子数组*/ while(i<len && nums[i]+1==nums[i+1]){ flag=true; i++; } /*判断是否这次为多个数字连续*/ if(flag){ sb.append("->"); sb.append(nums[i]); } flag=false;//falg置为false,准备下一次循环 i++; list.add(new String(sb)); sb.delete(0, sb.length()); } return list; }
仔细分析,认真代码。
相关文章推荐
- 禁用select下拉方法
- 激发程序员创意的6本书
- 使用WinINet发送HTTP请求并获取数据[原]
- 【转】位运算应用口诀和实例
- 【转】D3DXMatrixPerspectiveFovLH函数详解
- 【转】D3DXMatrixPerspectiveFovLH参数fovy
- 【转】D3DXLoadSkinMeshFromXof函数及.x在不同dx版本中
- 【转】C/C++字节对齐算法
- fstream和stringstream之间的转换
- 【转】协议适配器错误(ORA-12560: TNS:protocol adapter error)
- oracle 10g sqlplus,PL SQL Developer,character中文乱码解
- 【转】 IntelliJ Idea 常用快捷键列表
- 【转】C++类的实例分布
- 【转】C++成员函数的内存分配问题
- 【转】C++的64位整数
- 从git中删除 .idea 目录
- 09年最受关注的十大Visual Studio插件
- 编码中的硬回车与软回车
- 解析fastJson
- 无法打开包括文件:'atlrx.h'的解决办法[原]