leetcode 原题链接:https://leetcode.com/problems/summary-ranges/
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和end分别指向连续数字的第一个数字,初始情况就是指向位置为0的数,每当nums[end] 与 nums[end+1]的差值不是1的时候,就说明start和end之间是连续的数组。需要说明的是,要注意处理最后一个连续数字区间,因为最后一个区间不满足判断条件,需要另外处理。
实现代码
public static List<String> summaryRanges(int[] nums)
{
List<String> list = new ArrayList<String>();
if (nums.length == 0)
return list;
int start = 0, end = 0;
for (int i = 1; i < nums.length; i++)
{
if (nums[end+1] - nums[end] != 1)
{
insertList(nums, start, end, list);
start = end+1;
end = end+1;
}else
{
end++;
}
}
insertList(nums, start, end, list);
return list;
}
private static void insertList(int[] nums, int start, int end, List<String> list)
{
String str;
if (start == end)
{
str = nums[start] + "";
}else
{
str = nums[start] + "->" + nums[end];
}
// for (int i = start+1; i <= end; i++)
// {
// str = str + "->" + nums[i];
// }
list.add(str);
}