题目地址:Summary Ranges
题目简介:
给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。
示例 1:
输入: [0,1,2,4,5,7]
输出: ["0->2","4->5","7"]
解释: 0,1,2 可组成一个连续的区间; 4,5 可组成一个连续的区间。
示例 2:
输入: [0,2,3,4,6,8,9]
输出: ["0","2->4","6","8->9"]
解释: 2,3,4 可组成一个连续的区间; 8,9 可组成一个连续的区间。
题目解析:
记住每次起始位置,遍历一次,连续的数字自然成一个区间,连续的判断标准是nums[i] = nums[i - 1] + 1。当出现间断的时候,重新开始记起始位置。借助现有的数字与字符串的转换函数,完成上述任务。
C++版:
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> ans;
if (nums.empty())
return ans;
if (nums.size() == 1)
{
ans.push_back(std::to_string(nums[0]));
return ans;
}
int len = nums.size();
int start = nums[0];
int temp = start;
for (int i = 1; i < len; i++)
{
if (temp + 1 == nums[i])
temp++;
else
{
if (temp == start)
ans.push_back(std::to_string(start));
else
ans.push_back(std::to_string(start) + "->" + std::to_string(temp));
start = nums[i];
temp = start;
}
}
if (nums[len - 1] == nums[len - 2] + 1)
ans.push_back(std::to_string(start) + "->" + std::to_string(nums[len - 1]));
else
ans.push_back(std::to_string(nums[len - 1]));
return ans;
}
};
Python版:
class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
if len(nums) == 0:
return []
if len(nums) == 1:
return [str(nums[0])]
_size, start, temp = len(nums), nums[0], nums[0]
ans = []
for i in range(1, _size):
if temp + 1 == nums[i]:
temp += 1
else:
if temp == start:
ans.append(str(start))
else:
ans.append(str(start) + "->" + str(temp))
start = nums[i]
temp = start
if (nums[_size - 1] == nums[_size - 2] + 1):
ans.append(str(start) + "->" + str(nums[_size - 1]))
else:
ans.append(str(nums[_size - 1]))
return ans