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"].
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> ans;
for (int i=0; i<nums.size();) {
const int start = i;
int expect = nums[i];
while (++i<nums.size() && nums[i] == ++expect);
ans.push_back(to_string(nums[start]));
if (i-1 != start)
ans.back() += "->" + to_string(nums[i-1]);
}
return ans;
}
};
下面一种写法,代码略短一行。
此法来自https://leetcode.com/discuss/42204/7-9-lines-in-c
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> ans;
for (int i=0, start=0; i<nums.size(); start=++i) {
while (i+1<nums.size() && nums[i+1] == nums[i]+1)
++i;
ans.push_back(to_string(nums[start]));
if (i != start)
ans.back() += "->" + to_string(nums[i]);
}
return ans;
}
};