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”].
/**
* 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 i,j,k;
int n=0;
char c[100][50]={{0}};
char** summary = NULL;
if(numsSize==0) return NULL;
for(i=0;i<numsSize;)
{
k=nums[i];
for(j=1;i+j<numsSize;j++)
{
if(nums[i+j]-k==1) k=nums[i+j];
else
{
if(j>1)
{
sprintf(c[n++], "%d->%d", nums[i], k);
}
else
{
sprintf(c[n++], "%d", nums[i]);
}
break;
}
}
if(i+j<numsSize) i+=j;
else
{
if(j>1)
{
sprintf(c[n++], "%d->%d", nums[i], k);
}
else
{
sprintf(c[n++], "%d", nums[i]);
}
break;
}
}
*returnSize = n;
summary = (char**)malloc(sizeof(char*)*n);
for(i=0;i<n;i++)
{
char *st = (char*)malloc(sizeof(char)*50);
sprintf(st, "%s", c[i]);
summary[i] = st;
}
return summary;
}
数组指针返回,部分语法参考https://leetcode.com/discuss/42528/0ms-c-solution-easy-to-understand