mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2026-03-13 10:02:05 +08:00
Add solution 228、1694、1695
This commit is contained in:
19
leetcode/0228.Summary-Ranges/228. Summary Ranges.go
Normal file
19
leetcode/0228.Summary-Ranges/228. Summary Ranges.go
Normal 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
|
||||
}
|
||||
62
leetcode/0228.Summary-Ranges/228. Summary Ranges_test.go
Normal file
62
leetcode/0228.Summary-Ranges/228. Summary Ranges_test.go
Normal 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")
|
||||
}
|
||||
107
leetcode/0228.Summary-Ranges/README.md
Normal file
107
leetcode/0228.Summary-Ranges/README.md
Normal 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
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user