leetcode 228. 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"].

Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

 

Subscribe to see which companies asked this question

 
 
题意不是很难,就是如果是连续的数字就用范围的形式表现出来,例如1,2,3,4写成1~4
 
我的方法就是简单的扫描一下。
在测试的时候,遇到两个问题:
1.如果遇到vector的最后一个元素的话,要进行判断,否则没有“下一个”元素给你判断了。
2. [-2147483648,-2147483647,2147483647]遇到最小的数和最大的数,我原本判断是用下一个数减当前数是否大于1,后来改成不等于1就可以AC了
(还想了关于按位异或的方法,不过没成功,按位异或的符号是^)
 
class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> ret;
        int len=nums.size();
        if(len==0) return ret;
        int i=0,j=0;
        for(i=0;i<len;i++){
            stringstream ss;
            string tmp;
            ss<<nums[i];
            if(i==len-1||nums[i+1]-nums[i]>1){
                ss>>tmp;
                ret.push_back(tmp);
                continue;
            }
            for(j=i;j<len;j++){
                if(j+1<len){
                if(nums[j+1]-nums[j]!=1) break;}
                else {
                    ss<<"->";
                    ss<<nums[j];
                    ss>>tmp;
                    ret.push_back(tmp);
                    return ret;
                }
            }
            ss<<"->";
            ss<<nums[j];
            ss>>tmp;
            ret.push_back(tmp);
            i=j;
        }
        return ret;
    }
};

 

 
posted @ 2016-01-04 10:53  0giant  阅读(331)  评论(0编辑  收藏  举报