228 .Summary Ranges
Difficulty: Medium
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”].
解题思路
思路是比较清楚地,就是整出两个指向头尾的数值,并随着循环递增判断是否每次都比原来的end值多1,如果是,就置新的end为end+1,不是则将begin与end都指向nums[i+1]
为了输出格式对应,做了一个简单的format函数(思路来源于网络),这样就省着判断了,因为过程中需要两次运用到这个函数。format函数十分简单,就是判断begin与end确认构成的string并返回即可。
具体实现
class Solution {
public:
string format(
int begin,
int end)
{
char buffer[
32];
if (end == begin)
{
sprintf(buffer,
"%d", begin);
}
else
{
sprintf(buffer,
"%d->%d", begin, end);
}
return string(buffer);
}
vector<string> summaryRanges(
vector<int>& nums) {
vector<string> ans;
if(nums.size() <
1)
return ans;
int begin,end;
begin = nums[
0];
end = nums[
0];
for(
int i =
1;i < nums.size();i++)
{
if(end+
1 == nums[i]||end == nums[i])
{
end = nums[i];
}
else
{
ans.push_back(format(begin,end));
begin = end = nums[i];
}
}
ans.push_back(format(begin,end));
return ans;
}
};
ps:感觉自己都在做简单题呢。。下个星期开始挑战点难得题目算了。
转载请注明原文地址: https://ju.6miu.com/read-1124568.html