题意
解法
其实比较简单
直接贴代码了
class Solution {
public List<String> summaryRanges(int[] nums) {
final String interval="->";
List<String>ans=new ArrayList<>();
Arrays.sort(nums);
int i=0;
while(i<nums.length){
int pre=i;
StringBuffer a=new StringBuffer(String.valueOf(nums[i]));
if(i+1==nums.length){
ans.add(a.toString());
break;
}
while(i+1<nums.length&&nums[i]+1==nums[i+1]){
i++;
}
if(i!=pre){
a.append(interval).append(nums[i]);
}
ans.add(a.toString());
i++;
}
return ans;
}
}
比较有意思的地方
在这个while判读的时候,必须要先判断下标合法然后才是是否递增。因为&&操作是一个快速失败的操作这里可以体会到快速失败的含义。或者这里加上try catch
class Solution {
public List<String> summaryRanges(int[] nums) {
final String interval="->";
List<String>ans=new ArrayList<>();
Arrays.sort(nums);
int i=0;
while(i<nums.length){
int pre=i;
StringBuffer a=new StringBuffer(String.valueOf(nums[i]));
if(i+1==nums.length){
ans.add(a.toString());
break;
}
try {
while (nums[i] + 1 == nums[i + 1]) {
i++;
}
}catch (Exception e){
}
if(i!=pre){
a.append(interval).append(nums[i]);
}
ans.add(a.toString());
i++;
}
return ans;
}
}
这样写也能通过,哈哈比较有意思。我之前看到别人访问数组这样访问:
说是这样访问呢可以减少运行时下标检查,速度更快。有待考证。