Summary Ranges

来源:互联网 发布:java运维工程师面试题 编辑:程序博客网 时间:2024/05/22 06:24

题目名称
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(“”)的区别,前者只是清空状态位,并没有清空内容。)

0 0
原创粉丝点击