题目
Given a sorted integer array without duplicates, return the summary of its ranges.
For example, given [0,1,2,4,5,7], return [“0->2”,”4->5”,”7”].
思路
假设连续数的起点start=nums[0],遍历一次数组,判断nums[i-1]是否与nums[i]相等来找出不连续的点,将这些不连续的起点和终点保存并每找到一次就更新一次起点start,注意边界问题。
实现代码如下:
public List<String> summaryRanges(int[] nums) {
//将不连续的数字保存到一个List中即可
List<String> res = new ArrayList<String> ();
if(nums==null||nums.length<=0){
return res;
}
if(nums.length ==1){//要考虑长度为1这种情况
res.add(nums[0]+"");
return res;
}
//下面就是nums长度大于1的情况,找出不连续的每段数据
int begin=nums[0];
int end = 0;
for(int i=1;i<nums.length;i++){
int cur = nums[i-1];
end = nums[i];
if(end!=cur+1){//此时 i-1 和 i 就是不连续的点
if(begin==cur){
res.add(begin+"");
}
else{
res.add(begin+"->"+cur);
}
begin = end;
}
//将最后一组加入
if(i == nums.length-1){
if(begin==end){
res.add(begin+"");
}
else{
res.add(begin+"->"+end);
}
}
}
return res;
}