LeetCode(2),汇总区间

159 阅读1分钟

给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。

示例 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 可组成一个连续的区间。

解:

char ** summaryRanges(int* nums, int numsSize, int* returnSize){
	int i;	
	char **result = (char **)malloc(4*numsSize);//分配内存
	char *p ;

	*returnSize = 0 ;//已找到的连续数字
	int start  = nums[0];

	for ( i = 1; i < numsSize; ++i)
	{
		if(nums[i]==nums[i-1]+1){
			continue;
		}else{
			//处理原来的串
			p = (char *)malloc(200);
			*(result + *returnSize) = p;
			(*returnSize)++;

			if(start==nums[i-1]){
				sprintf(p,"%d",start);		
			}else{
				sprintf(p,"%d->%d",start,nums[i-1]);
			}
			

			start = nums[i];

		}
	}

	p = (char *)malloc(200);
	*(result + *returnSize) = p;
	(*returnSize)++;

	if(start==nums[numsSize-1]){
		sprintf(p,"%d",start);		
	}else{
		sprintf(p,"%d->%d",start,nums[numsSize-1]);
	}



	return result;
}