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

 

 

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