public class Solution {
public List<String> summaryRanges(int[] nums) {
int i=0;
List<String> result=new ArrayList<String>();
while(i<nums.length){
String s="";
s+=nums[i];
if(i<nums.length-1&&nums[i]+1==nums[i+1]){
s+="->";
while(i<nums.length-1&&nums[i]+1==nums[i+1]){
i++;
}
s+=nums[i];
}
result.add(s);
s=new String();
i++;
}
return result;
}
}
public List<String> summaryRanges(int[] nums) {
LinkedList<String> list = new LinkedList<String>();
if(nums.length==1){
list.add(nums[0]+"");
return list;
}
for(int i=0;i<nums.length-1;i++){
boolean onlyHead = true;
String s = nums[i]+"";
while((i<nums.length-1)&&Math.abs(nums[i]-nums[i+1])==1){
onlyHead=false;
i++;
}
if(!onlyHead){
if(i==nums.length-1){
if(Math.abs(nums[i]-nums[i-1])==1){
s =s + "->"+nums[i];
list.add(s);
}else{
s += "->"+nums[i-1];
list.add(s);
s = nums[i]+"";
list.add(s);
}
}else if(i==nums.length-2){
s += "->"+nums[i];
list.add(s);
list.add(nums[i+1]+"");
}
else{
s += "->"+nums[i];
list.add(s);
}
}else{
if(i==nums.length-2){
list.add(s);
list.add(nums[i+1]+"");
}else{
list.add(s);
}
}
}
return list;
}
上面是网上找到的解法,下面是我自己的解法,
通过比较发现,我的解法之中使用了过多的条件判断,而且由于在外层的for循环中,判断条件使用了nums,length-1,所以给边界条件制造了非常多的不必要麻烦。
之后做题中可以选择在内层循环中键入更为强制的条件,而在外层循环中使条件合理的宽松,内外要有区别。