Leetcode 第228题:Summary Ranges--汇总区间(C++、Python)

题目地址:Summary Ranges


题目简介:

给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。

示例 1:     
输入: [0,1,2,4,5,7]     
输出: ["0->2","4->5","7"]     
解释: 0,1,2 可组成一个连续的区间; 4,5 可组成一个连续的区间。

示例 2:     
输入: [0,2,3,4,6,8,9]   
输出: ["0","2->4","6","8->9"]     
解释: 2,3,4 可组成一个连续的区间; 8,9 可组成一个连续的区间。

题目解析:

记住每次起始位置,遍历一次,连续的数字自然成一个区间,连续的判断标准是nums[i] = nums[i - 1] + 1。当出现间断的时候,重新开始记起始位置。借助现有的数字与字符串的转换函数,完成上述任务。

C++版:

class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> ans;
        if (nums.empty())
            return ans;
        if (nums.size() == 1)
        {
            ans.push_back(std::to_string(nums[0]));
            return ans;
        }
        int len = nums.size();
        int start = nums[0];
        int temp = start;
        for (int i = 1; i < len; i++)
        {
            if (temp + 1 == nums[i])
                temp++;
            else
            {
                if (temp == start)
                    ans.push_back(std::to_string(start));
                else
                    ans.push_back(std::to_string(start) + "->" + std::to_string(temp));
                start = nums[i];
                temp = start;               
            }
        }
        if (nums[len - 1] == nums[len - 2] + 1)
            ans.push_back(std::to_string(start) + "->" + std::to_string(nums[len - 1]));
        else
            ans.push_back(std::to_string(nums[len - 1]));
        return ans;
    }
};

Python版:

class Solution:
    def summaryRanges(self, nums: List[int]) -> List[str]:
        if len(nums) == 0:
            return []
        if len(nums) == 1:
            return [str(nums[0])]
        _size, start, temp = len(nums), nums[0], nums[0]
        ans = []
        for i in range(1, _size):
            if temp + 1 == nums[i]:
                temp += 1
            else:
                if temp == start:
                    ans.append(str(start))
                else:
                    ans.append(str(start) + "->" + str(temp))
                start = nums[i]
                temp = start
        if (nums[_size - 1] == nums[_size - 2] + 1):
            ans.append(str(start) + "->" + str(nums[_size - 1]))
        else:
            ans.append(str(nums[_size - 1]))
        return ans

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章