【leetcode】- Summary Range (将连续的数组成一个范围)

1、题目描述

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.

2、问题描述:

  • 给一排好序的数组,如果数组中的数字连续的那么将它们连接起来。

3、问题关键:

  • 一个start和一个end,如果不是连续的,将前面的合并即可。
  • 不要忘记最后一个区间。
  • ** 不要忘记,只有一个数字的问题。**

4、C++代码:

class Solution {
public:
    string rangeToString(int st, int ed) {//这是一个生成字符范围的函数。
        if (st == ed) return to_string(ed);//注意,如果是一个数,那么直接tostring就就可以了。
        return to_string(st) + "->" + to_string(ed);
    }
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> res;
        if(nums.empty()) return res;
        int st = nums[0], ed = st;
        for (int i = 1; i < nums.size(); i ++) {
            int x = nums[i];
            if (x > ed + 1)  {
                res.push_back(rangeToString(st, ed));
                st = ed = x; //区间合并为,定义新的起始值。
            }
            else ed ++;//否则end向后移动一格。
        }
        res.push_back(rangeToString(st, ed));//最后别忘记把最后一个区间加入。
        return res;
    }
};
    原文作者:邓泽军_3679
    原文地址: https://www.jianshu.com/p/2b8c7de7f44a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞