[leetcode] 228. Summary Ranges 解题报告

 题目链接:https://leetcode.com/problems/summary-ranges/

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> result;
        if(nums.size() == 0)
            return result;
        string str = "";
        int index1=0, index2=0, old = nums[0]-1;
        for(int i = 0; i< nums.size(); i++)
        {
            stringstream ss;
            if(nums[i] == old + 1)
                index2 = i;
            else if(nums[i] != old +1)
            {
                ss << nums[index1];
                if(index2 != index1)
                    ss << "->" << nums[index2];
                result.push_back(ss.str());
                ss.clear();
                ss.str("");
                index1 = index2 = i;
            }
            if(i+1 == nums.size())//如果当前是最后一个
            {
                cout << index1 << " " << index2 <<endl;
                ss << nums[index1];
                if(index2 != index1)
                    ss << "->" << nums[index2];
                result.push_back(ss.str());
            }
            old = nums[i];
        }
        return result;
    }
};


我很不满意这份代码,后来又看了一下别人怎么写的,发现一份非常漂亮的代码,参照他的思路我又写了一份。如下:

class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> result;
        int i = 0, len = nums.size();
        while(i < len)
        {
            stringstream ss;
            int j = 1;
            while(i+j < len && nums[i+j] - nums[i] == j)
                j++;
            if(j > 1)//区间长度大于1
                ss << nums[i] << "->" << nums[i+j-1];
            else//区间长度为1
                ss << nums[i];
            result.push_back(ss.str());
            i += j;
        }
        return result;
    }
};

这一份代码不仅非常整洁,而且效率比第一份要高一些。

参考:http://www.lxway.com/44098462.htm

你可能感兴趣的:(LeetCode,算法,array)