leetcode 228. 汇总区间

class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
int size = nums.size();
if(size == 1) return {to_string(nums[0])};
vector<string> res;
for(int left = 0,right = 0;right < size;){
while(right < size-1 && nums[right] + 1 == nums[right+1]) ++right;
if(right == size-1 && nums[right-1] == nums[right]) ++right;
if(left == right) res.emplace_back(to_string(nums[left]));
else res.emplace_back(to_string(nums[left]) + "->" + to_string(nums[right]));
++right;left = right;
}
return res;
}
};
题解中更简洁优雅的写法:
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
int size = nums.size();
vector<string> res;
for(int left = 0,right = 0;right < size;++right){
if(right + 1 == size || nums[right] + 1 != nums[right + 1]){
string str = to_string(nums[left]);
if(left != right) str = str + "->" + to_string(nums[right]);
res.emplace_back(str);
left = right + 1;
}
}
return res;
}
};
一般来说,分组循环的模板:
i, n = 0, len(nums)
while i < n:
start = i
while i < n and ...:
i += 1
# 从 start 到 i-1 是一段
# 下一段从 i 开始,无需 i+=1
浙公网安备 33010602011771号