228. Summary Ranges
Given a sorted integer array without duplicates, return the summary of its ranges.
Example 1:
Input:
[0,1,2,4,5,7]
Output:
["0-
>
2","4-
>
5","7"]
Explanation:
0,1,2 form a continuous range; 4,5 form a continuous range.
Example 2:
Input:
[0,2,3,4,6,8,9]
Output:
["0","2-
>
4","6","8-
>
9"]
Explanation:
2,3,4 form a continuous range; 8,9 form a continuous range.
Solution
(1) Java
public class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> summary = new ArrayList<>();
for (int i = 0, j = 0; j < nums.length; ++j) {
// check if j + 1 extends the range [nums[i], nums[j]]
if (j + 1 < nums.length && nums[j + 1] == nums[j] + 1)
continue;
// put the range [nums[i], nums[j]] into the list
if (i == j)
summary.add(nums[i] + "");
else
summary.add(nums[i] + "->" + nums[j]);
i = j + 1;
}
return summary;
}
}
(2) Python
class Solution:
def summaryRanges(self, nums):
"""
:type nums: List[int]
:rtype: List[str]
"""
if not nums:
return nums
rst = []
start,end = 0, 0
for i, v in enumerate(nums):
if i > 0:
if nums[i-1]+1 != v:
if start == end:
rst.append(str(nums[i-1]))
else:
rst.append(str(nums[start])+"->"+str(nums[end]))
start = end = i
else:
end = i
if i == len(nums)-1:
if start == end:
rst.append(str(v))
else:
rst.append(str(nums[start])+"->"+str(nums[end]))
return rst
(3) Scala