算法-汇总区间(228)
这题可以用区间来做,区间是什么,在编程问题中,区间常用于表示连续的数字集合,比如这道题【0,2】就表示0,1,2这样的数字集合。
所以这道题首先定义一个字符数组用来存输出结果,然后定义一个变量,用来存储起始位置,如果找不到和它连续的数,则将这个单个字符存入字符数组,否则继续遍历,直到没有相邻数字,代码如下。
class Solution {
public List<String> summaryRanges(int[] nums) {
// 返回恰好覆盖数组中所有数字的最小有序区间范围列表。 nums中每个元素恰好被区间覆盖,并且不存在某个范围但不属于nums的数字x
List<String>ranges=new ArrayList<>();
if(nums.length==0||nums==null){
return ranges;
}
int start=nums[0];//当前区间的起点
for(int i=1;i<=nums.length;i++){
// 检查当前数字是否不连续
if(i==nums.length||nums[i]!=nums[i-1]+1){
//当前区间结束
if(start==nums[i-1]){
ranges.add(String.valueOf(start));
}
else{
ranges.add(start+"->"+nums[i-1]);
}
// 更新下一个起始点
if(i<nums.length){
start=nums[i];
}
}
}
return ranges;
}
}