Problem:
Given a sorted integer array without duplicates, return the summary of its ranges.
For example, given [0,1,2,4,5,7]
, return ["0->2","4->5","7"].
Analysis:
Group elements of an array by contiguous increasing.
Solutions:
C++:
void AddEndPoint(string& s_range, int num)
{
if(num == 0) {
s_range.push_back('0');
return;
}
if(num < 0)
s_range.push_back('-');
unsigned int u_num = abs(num);
string s_point;
while(u_num > 0) {
int c_digit = u_num % 10;
u_num /= 10;
s_point.insert(s_point.begin(), c_digit + '0');
}
s_range.append(s_point);
}
vector<string> summaryRanges(vector<int>& nums) {
vector<string> collection_ranges;
if(nums.empty())
return collection_ranges;
for(int i = 0; i < nums.size();) {
int start_num = nums[i];
int end_num = nums[i];
int j = i + 1;
for(; j < nums.size(); ++j) {
if(nums[j] - nums[i] != j - i)
break;
end_num = nums[j];
}
string s_range;
AddEndPoint(s_range, start_num);
if(start_num != end_num) {
s_range.append("->");
AddEndPoint(s_range, end_num);
}
collection_ranges.push_back(s_range);
i = j;
}
return collection_ranges;
}
Java
:
Python: