给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。
示例 1:
输入: [0,1,2,4,5,7]
输出: ["0->2","4->5","7"]
解释: 0,1,2 可组成一个连续的区间; 4,5 可组成一个连续的区间。
示例 2:
输入: [0,2,3,4,6,8,9]
输出: ["0","2->4","6","8->9"]
解释: 2,3,4 可组成一个连续的区间; 8,9 可组成一个连续的区间。
C
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
char** summaryRanges(int* nums, int numsSize, int* returnSize)
{
int n=numsSize;
char** res=NULL;
if(n==0)
{
*returnSize=0;
return res;
}
else if(n==1)
{
res=(char**)malloc(sizeof(char*));
res[0]=(char*)malloc(sizeof(char)*255);
sprintf(res[0],"%d",nums[0]);
*returnSize=1;
return res;
}
else
{
res=(char**)malloc(sizeof(char*)*n);
for(int i=0;i<n;i++)
{
res[i]=(char*)malloc(sizeof(char)*255);
}
int k=0;
int count=0;
int aa=nums[0];
for(int i=1;i<n;i++)
{
if(nums[i]-nums[i-1]==1)
{
count++;
}
else
{
if(count==0)
{
sprintf(res[k],"%d",aa);
k++;
aa=nums[i];
}
else
{
sprintf(res[k],"%d%s%d",aa,"->",aa+count);
k++;
count=0;
aa=nums[i];
}
}
if(count==0)
{
sprintf(res[k],"%d",aa);
}
else
{
sprintf(res[k],"%d%s%d",aa,"->",aa+count);
}
*returnSize=k+1;
}
return res;
}
}
C++
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums)
{
vector<string> res;
int n=nums.size();
for(int i=0;i<n;i++)
{
nums[i]=(long long)nums[i];
}
if(0==n)
{
return res;
}
string tmp=to_string(nums[0]);
int start=0;
for(int i=1;i<n;i++)
{
if(nums[i]!=nums[i-1]+1)
{
if(i==start+1)
{
res.push_back(tmp);
start=i;
tmp=to_string(nums[i]);
}
else
{
tmp+="->";
tmp+=to_string(nums[i-1]);
res.push_back(tmp);
start=i;
tmp=to_string(nums[i]);
}
}
}
if(start==n-1)
{
res.push_back(tmp);
}
else
{
tmp+="->";
tmp+=to_string(nums[n-1]);
res.push_back(tmp);
}
return res;
}
};
python
class Solution:
def summaryRanges(self, nums):
"""
:type nums: List[int]
:rtype: List[str]
"""
n=len(nums)
res=[]
count=0
if n==0:
return res
elif n==1:
temp=str(nums[0])
res.append(temp)
return res
else:
aa=nums[0]
temp=str(nums[0])
for i in range(1,n):
if nums[i]-nums[i-1]==1:
count += 1
else:
if count==0:
res.append(temp)
aa=nums[i]
temp=str(nums[i])
else:
temp+="->"
temp+=str(aa+count)
res.append(temp)
aa=nums[i]
count=0
temp=str(nums[i])
if count==0:
res.append(temp)
else:
temp+="->"
temp+=str(aa+count)
res.append(temp)
return res;