Files
2021-01-12 11:04:25 +08:00

107 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# [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
}
```