【题目】
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"].
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
【思路】
其实这道题 仔细 做的话 , 要注意的细节非常的多呢
我自己做的那个就是漏洞百出
1.要注意nums为空,或者长度为零的情况,返回的list也应该是长度为 0的,而不是null.
2。 如何分别处理 range 的情况和单独元素的情况,:
range 的情况的话呢 是 start->end
一个的情况是:num
所以这里要设计下了:
一个数来记录每一段的起始值,如果后一个是当前的+1,i就++。直到头或者不符合+1.
这时候判断,当前值和起始值的关系,如果两个相同,就是第二种情况range,如果两个不同就是第一种情况,两个数相同。然后循环继续。
所以,道理就是:
大循环遍历一遍整个数组,里面小指针过一遍一个range,总体还是一遍。O(n).
3.要考虑长度为 1 的时候,返回第一个 数字
【代码】
别人的代码
List<String> list=new ArrayList();
if(nums.length==1){
list.add(nums[0]+"");
return list;
}
for(int i=0;i<nums.length;i++){
int a=nums[i];
while(i+1<nums.length&&(nums[i+1]-nums[i])==1){
i++;
}
if(a!=nums[i]){
list.add(a+"->"+nums[i]);
}else{
list.add(a+"");
}
}
return list;