close

You are given a sorted unique integer array nums.

A range [a,b] is the set of all integers from a to b (inclusive).

Return the smallest sorted list of ranges that cover all the numbers in the array exactly. That is, each element of nums is covered by exactly one of the ranges, and there is no integer x such that x is in one of the ranges but not in nums.

Each range [a,b] in the list should be output as:

  • "a->b" if a != b
  • "a" if a == b

 

Example 1:

Input: nums = [0,1,2,4,5,7]
Output: ["0->2","4->5","7"]
Explanation: The ranges are:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"

Example 2:

Input: nums = [0,2,3,4,6,8,9]
Output: ["0","2->4","6","8->9"]
Explanation: The ranges are:
[0,0] --> "0"
[2,4] --> "2->4"
[6,6] --> "6"
[8,9] --> "8->9"

 

Constraints:

  • 0 <= nums.length <= 20
  • -231 <= nums[i] <= 231 - 1
  • All the values of nums are unique.
  • nums is sorted in ascending order.

 

 

image

 

vector<string>summaryRanges(vector<int>& nums)
{
    int index = 0;
    vector<string>result;

    while (index < nums.size()) {

        string strOutput;
        strOutput = std::to_string(nums[index]);

        bool bHaveChange = false;
        for (int i = index; i < nums.size(); i++)
        {
            int nValue = 0;
            if (i + 1 < nums.size())
            {
                nValue = nums[index] + 1;
            }
            else
            {
                if (bHaveChange) {
                    strOutput += "->";
                    strOutput += std::to_string(nums[index]);

                }
                result.push_back(strOutput);
                return result;
            }
            
            if ( nValue == nums[i + 1])
            {
                index++;
                bHaveChange = true;
            }
            else
            {
                if (bHaveChange) {
                    strOutput += "->";
                    strOutput += std::to_string(nums[index]);
                    
                }
                result.push_back(strOutput);
                index++;
                break;
            }
            
        }
    }
    return result;
}

 

 

老實說, 這題算是我有小卡的一題, 而且解的方式真的很糟糕, 一直在想有什麼更好的方式可以更好的表達, 但好像還是不行, 弄者弄者就中午了, 先去吃飯, 晚上有小加班的時候再想看看好了.

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Eric 的頭像
    Eric

    一個小小工程師的心情抒發天地

    Eric 發表在 痞客邦 留言(0) 人氣()