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; } };