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



results matching ""

    No results matching ""