mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 00:25:22 +08:00
107 lines
2.1 KiB
Markdown
107 lines
2.1 KiB
Markdown
# [228. Summary Ranges](https://leetcode.com/problems/summary-ranges/)
|
||
|
||
## 题目
|
||
|
||
You are given a **sorted unique** integer array `nums`.
|
||
|
||
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"
|
||
|
||
```
|
||
|
||
**Example 3:**
|
||
|
||
```
|
||
Input: nums = []
|
||
Output: []
|
||
|
||
```
|
||
|
||
**Example 4:**
|
||
|
||
```
|
||
Input: nums = [-1]
|
||
Output: ["-1"]
|
||
|
||
```
|
||
|
||
**Example 5:**
|
||
|
||
```
|
||
Input: nums = [0]
|
||
Output: ["0"]
|
||
|
||
```
|
||
|
||
**Constraints:**
|
||
|
||
- `0 <= nums.length <= 20`
|
||
- `231 <= nums[i] <= 231 - 1`
|
||
- All the values of `nums` are **unique**.
|
||
- `nums` is sorted in ascending order.
|
||
|
||
## 题目大意
|
||
|
||
给定一个无重复元素的有序整数数组 nums 。
|
||
|
||
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
|
||
|
||
列表中的每个区间范围 [a,b] 应该按如下格式输出:
|
||
|
||
- "a->b" ,如果 a != b
|
||
- "a" ,如果 a == b
|
||
|
||
## 解题思路
|
||
|
||
- 简单题。按照题意,用一个游标变量累加寻找连续的区间。一旦出现了中断,就按照题意格式输出。输出的规则有多种,带箭头的区间,单个元素区间,空区间。
|
||
|
||
## 代码
|
||
|
||
```go
|
||
package leetcode
|
||
|
||
import (
|
||
"strconv"
|
||
)
|
||
|
||
func summaryRanges(nums []int) (ans []string) {
|
||
for i, n := 0, len(nums); i < n; {
|
||
left := i
|
||
for i++; i < n && nums[i-1]+1 == nums[i]; i++ {
|
||
}
|
||
s := strconv.Itoa(nums[left])
|
||
if left != i-1 {
|
||
s += "->" + strconv.Itoa(nums[i-1])
|
||
}
|
||
ans = append(ans, s)
|
||
}
|
||
return
|
||
}
|
||
``` |