題目地址: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