j
jaryue
V1
2023/03/17阅读:20主题:默认主题
汇总区间
题目描述
给定一个 无重复元素 的 有序 整数数组 nums 。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b] 应该按如下格式输出:
"a->b" ,如果 a != b "a" ,如果 a == b
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/summary-ranges 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
这个题主要是判断前后两数是否相差1,
最难搞的是如何正确输出字段.特别是不能超出数组范围,同时不能缺失数组末尾的元素,还要考虑只有一个元素的情况
代码示例
func summaryRanges(nums []int) []string {
if len(nums) == 1 {
return []string{strconv.Itoa(nums[0])}
}
s := []string{}
for i, j := 0, 1; j < len(nums); {
if nums[j] != nums[j-1]+1 {
if j-1 == i {
s = append(s, strconv.Itoa(nums[i]))
i = j
} else {
s = append(s, strconv.Itoa(nums[i])+"->"+strconv.Itoa(nums[j-1]))
i = j
}
}
if j >= len(nums)-1 {
if j == i {
s = append(s, strconv.Itoa(nums[i]))
i = j
} else {
s = append(s, strconv.Itoa(nums[i])+"->"+strconv.Itoa(nums[j]))
i = j
}
}
j++
}
return s
}
执行结果

更多
更多解决方法请参考:https://leetcode.cn/problems/summary-ranges/solution/
作者介绍
j
jaryue
V1