## [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)$
:::