关闭

LeetCode(228) Summary Ranges

标签: leetcode
289人阅读 评论(0) 收藏 举报
分类:

题目

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”].

分析

题目要求很明显,要求对给定的一组有序整数序列按照连续性分组显示;

一次遍历记录连续子序列的首尾元素,然后转换为string格式,整数和字符串格式类型转换需要特别注意INT_MIN时特殊处理;

AC代码

class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        if (nums.empty())
            return vector<string>();

        int sz = nums.size();

        vector<string> ret;
        int start = nums[0], end = nums[0];
        for (int i = 1; i < sz; ++i)
        {
            if (nums[i] == end + 1)
                end = nums[i];
            else{
                string tmp;
                if (end == start)
                    tmp = IntToString(start);
                else
                    tmp = IntToString(start) + "->" + IntToString(end);

                ret.push_back(tmp);

                start = nums[i];
                end = nums[i];
            }
        }//for

        //加上最后一组
        string tmp;
        if (end == start)
            tmp = IntToString(start);
        else
            tmp = IntToString(start) + "->" + IntToString(end);
        ret.push_back(tmp);

        return ret;
    }

    string IntToString(long num)
    {
        if (num == 0)
            return "0";     
        else if (num == INT_MIN)
            return "-2147483648";       
        string str;
        bool flag = num < 0 ? false : true;

        num = abs(num);
        while (num)
        {
            char c = num % 10 + '0';
            num /= 10;
            str += c;
        }//while
        reverse(str.begin(), str.end());

        if (flag)
            return str;
        else
            return "-" + str;
    }
};

GitHub测试程序源码

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:641875次
    • 积分:9659
    • 等级:
    • 排名:第1837名
    • 原创:389篇
    • 转载:49篇
    • 译文:0篇
    • 评论:170条
    博客专栏
    最新评论