题目
LeetCode - 228. Summary Ranges
题目链接
https://leetcode.com/problems/summary-ranges/
参考博客
[1] https://blog.csdn.net/hlsdbd1990/article/details/46311137
解题思路
用一个容器将属于一个范围的数据存起来,然后统一转换。
额外发现:
STL容器中只有vector和queue支持迭代器的一般加法,比如,iter+n
,xx.begin()+n
,用法见参考博客[1]。
解题源码
class Solution {
public:
string int2str(long long int n){
string res;
if (n == 0) res.push_back('0');
else{
int flag = 1;
if (n < 0) {
flag = -1;
n = -n;
}
while(n){
res.push_back(n%10+'0');
n /= 10;
}
reverse(res.begin(), res.end());
if (flag == -1) res = "-"+res;
}
return res;
}
string outputr(vector<long long int> s){
string ans;
if (s.size() == 1){
ans = int2str(*(s.begin()));
}else{
sort(s.begin(), s.end());
ans = int2str(*(s.begin())) + "->" + int2str(*(s.end()-1));
}
return ans;
}
vector<string> summaryRanges(vector<int>& nums) {
vector<string> ans;
if (nums.size() == 0) return ans;
if (nums.size() == 1) {
ans.push_back(int2str(nums[0]));
return ans;
}
vector<long long int> s;
for (int i = 0; i < nums.size(); i++){
if (s.empty()){
s.push_back(nums[i]);
continue;
}
if (*(s.end()-1) + 1 == nums[i]){
s.push_back(nums[i]);
}else{
ans.push_back(outputr(s));
s.clear();
s.push_back(nums[i]);
}
}
ans.push_back(outputr(s));
return ans;
}
};