1 题目
Given a sorted integer array without duplicates, return the summary of its ranges.
Example 1:
Input: [0,1,2,4,5,7]
Output: ["0->2","4->5","7"]
Explanation: 0,1,2 form a continuous range; 4,5 form a continuous range.
Example 2:
Input: [0,2,3,4,6,8,9]
Output: ["0","2->4","6","8->9"]
Explanation: 2,3,4 form a continuous range; 8,9 form a continuous range.
2 尝试解
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> result;
if(nums.size()==0) return result;
if(nums.size()==1) {
result.push_back(to_string(nums[0]));
return result;
}
long int start = nums[0];
long int count = 1;
for(int i = 1; i < nums.size(); i++){
if(nums[i] == nums[i-1]+1) count++;
else{
if(count == 1) result.push_back(to_string(nums[i-1]));
else {
result.push_back(to_string(start)+"->"+to_string(start+count-1));
}
start = nums[i];
count = 1;
}
if(i == nums.size()-1){
if(count == 1) result.push_back(to_string(nums[i]));
else {
result.push_back(to_string(start)+"->"+to_string(start+count-1));
}
}
}
return result;
}
};
3 标准解
vector<string> summaryRanges(vector<int>& nums) {
const int size_n = nums.size();
vector<string> res;
if ( 0 == size_n) return res;
for (int i = 0; i < size_n;) {
int start = i, end = i;
while (end + 1 < size_n && nums[end+1] == nums[end] + 1) end++;
if (end > start) res.push_back(to_string(nums[start]) + "->" + to_string(nums[end]));
else res.push_back(to_string(nums[start]));
i = end+1;
}
return res;
}