题目名称
Summary Ranges—LeetCode链接
描述
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"]
.
分析
这道题题目意思很明确,对一个给定的整数集合,寻找它的数字域,连续的数字为一个数字域,当一个数字与左边和右边数字都不连续时,它的数字域就是本身。
C++代码
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
stringstream ss;
vector<string> res;
if(nums.size()==0)
//定义数字域的左迭代器和右迭代器
vector<int>::iterator left,right;
//遍历整个数字集合
for(left=nums.begin();left!=nums.end();left++){
//寻找数字域的右端
for(right=left;right+1!=nums.end() && *(right+1)==*right+1;right++){}
//左右端相等,表明是单个数字的数字域
if(right==left){
ss.str("");
ss<<*left;
cout<<"ss.str():"<<ss.str()<<endl;
res.push_back(ss.str());
}
else{
string s;
ss.str("");
ss<<*left;
s=ss.str()+"->";
ss.str("");
ss<<*right;
s+=ss.str();
cout<<"s:"<<s<<endl;
res.push_back(s);
}
left=right;
}
return res;
}
};
总结
题目有一个难点就是int类型转换成string类型,好在我们之前介绍过用stringstream进行数据类型转换。因为每次都要用到这个输入输出流,所以在对它操作之前一定要清空流的内容,例如定义一个stringsream ss,则可以用ss.str(“”)来清空流中内容,本题中多次用到该方法。(注意ss.clear()与ss.str(“”)的区别,前者只是清空状态位,并没有清空内容。)