Add solution 228、1694、1695

This commit is contained in:
YDZ
2021-01-12 11:04:25 +08:00
parent 1bc9d34209
commit fbbc4ff73a
16 changed files with 1618 additions and 828 deletions

View File

@@ -0,0 +1,19 @@
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
}

View File

@@ -0,0 +1,62 @@
package leetcode
import (
"fmt"
"testing"
)
type question228 struct {
para228
ans228
}
// para 是参数
// one 代表第一个参数
type para228 struct {
nums []int
}
// ans 是答案
// one 代表第一个答案
type ans228 struct {
ans []string
}
func Test_Problem228(t *testing.T) {
qs := []question228{
{
para228{[]int{0, 1, 2, 4, 5, 7}},
ans228{[]string{"0->2", "4->5", "7"}},
},
{
para228{[]int{0, 2, 3, 4, 6, 8, 9}},
ans228{[]string{"0", "2->4", "6", "8->9"}},
},
{
para228{[]int{}},
ans228{[]string{}},
},
{
para228{[]int{-1}},
ans228{[]string{"-1"}},
},
{
para228{[]int{0}},
ans228{[]string{"0"}},
},
}
fmt.Printf("------------------------Leetcode Problem 228------------------------\n")
for _, q := range qs {
_, p := q.ans228, q.para228
fmt.Printf("【input】:%v 【output】:%v\n", p, summaryRanges(p.nums))
}
fmt.Printf("\n\n\n")
}

View File

@@ -0,0 +1,107 @@
# [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
}
```