## [228\. Summary Ranges](https://leetcode.com/problems/summary-ranges/) 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. ```cpp= class Solution { public: vector<string> summaryRanges(vector<int>& nums) { int n = nums.size(); vector<string> ranges; for(int i = 0; i < n; i++) { // 將 nums[i] 當作起始點 start int start = nums[i]; // 如果跟下一個數字比,是連續遞增序列的話,i++ while(i < n - 1 && nums[i] + 1 == nums[i + 1]) { i++; } if (start != nums[i]) { // 像是 [0, 2] 這種情況 ranges.push_back(to_string(start) + "->" + to_string(nums[i])); } else { // 像是 [7, 7] 這種情況 ranges.push_back(to_string(start)); } } return ranges; } }; ``` :::success - 時間複雜度:$O(n)$ - 空間複雜度:$O(1)$ :::