给定一个 无重复元素 的 有序 整数数组 nums
。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums
的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums
的数字 x
。
列表中的每个区间范围 [a,b]
应该按如下格式输出:
"a->b"
,如果a != b
"a"
,如果a == b
示例 1:
输入:nums = [0,1,2,4,5,7] 输出:["0->2","4->5","7"] 解释:区间范围是: [0,2] --> "0->2" [4,5] --> "4->5" [7,7] --> "7"
示例 2:
输入:nums = [0,2,3,4,6,8,9] 输出:["0","2->4","6","8->9"] 解释:区间范围是: [0,0] --> "0" [2,4] --> "2->4" [6,6] --> "6" [8,9] --> "8->9"
提示:
0 <= nums.length <= 20
-231 <= nums[i] <= 231 - 1
nums
中的所有值都 互不相同nums
按升序排列
class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
def make(nums, i, j):
return str(nums[i]) if i == j else f'{nums[i]}->{nums[j]}'
i = j = 0
n = len(nums)
res = []
while j < n:
while j + 1 < n and nums[j] + 1 == nums[j + 1]:
j += 1
res.append(make(nums, i, j))
i = j + 1
j = i
return res
class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> res = new ArrayList<>();
for (int i = 0, j = 0, n = nums.length; j < n;) {
while (j + 1 < n && nums[j] + 1 == nums[j + 1]) {
++j;
}
res.add(make(nums, i, j));
i = j + 1;
j = i;
}
return res;
}
private String make(int[] nums, int i, int j) {
return i == j ? String.valueOf(nums[i]) : String.format("%d->%d", nums[i], nums[j]);
}
}
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> res;
for (int i = 0, j = 0, n = nums.size(); j < n;) {
while (j + 1 < n && nums[j] + 1 == nums[j + 1]) ++j;
res.push_back(make(nums, i, j));
i = j + 1;
j = i;
}
return res;
}
string make(vector<int>& nums, int i, int j) {
return i == j ? to_string(nums[i]) : to_string(nums[i]) + "->" + to_string(nums[j]);
}
};
func summaryRanges(nums []int) []string {
var res []string
for i, j, n := 0, 0, len(nums); j < n; {
for j+1 < n && nums[j]+1 == nums[j+1] {
j++
}
res = append(res, make(nums, i, j))
i = j + 1
j = i
}
return res
}
func make(nums []int, i, j int) string {
if i == j {
return strconv.Itoa(nums[i])
}
return strconv.Itoa(nums[i]) + "->" + strconv.Itoa(nums[j])
}
public class Solution {
public IList<string> SummaryRanges(int[] nums) {
var res = new List<string>();
for (int i = 0, j = 0, n = nums.Length; j < n;)
{
while (j + 1 < n && nums[j] + 1 == nums[j + 1])
{
++j;
}
res.Add(make(nums, i, j));
i = j + 1;
j = i;
}
return res;
}
public string make(int[] nums, int i, int j) {
return i == j ? nums[i].ToString() : string.Format("{0}->{1}", nums[i], nums[j]);
}
}