[C语言][LeetCode][228]Summary Ranges

题目

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”].

标签

Array

难度

简单

分析

题目意思是给定一个排好序并且没有重复的整形数组,求这些整型数的范围。我的做法是创建一个二维数组(长度为20,宽度为10)用于存储返回的字符串数组。这道题的关键在于找到开始和结束的整形数,由例子可以看出,如果前后两个数不相等的话,那么前面这个数就是字符串的结束数字,后面那个就是下一个字符串数组的开始数字。

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 i = 0;
    static char *array[20];
    int begin = nums[0], end=0;
    int j=0;

    if(numsSize == 0)
    {
        *returnSize = 0;
        return NULL;
     }

    for(i=0; i<20; i++)
    {
        array[i] = (char *)malloc(sizeof(char)*10);
        memset(array[i], 0, sizeof(char)*10);
    }

    for(i=0; i<numsSize-1; i++)
    {
        if( nums[i] != (nums[i+1] -1) )
        {
            end = nums[i];

            if(begin == end)
                sprintf(array[j++], "%d", begin);
            else
                sprintf(array[j++], "%d->%d", begin, end);

            begin = nums[i+1];
        }
    }

    if(begin == nums[i])
        sprintf(array[j++], "%d", begin);
    else
        sprintf(array[j++], "%d->%d", begin, nums[i]);

    *returnSize = j;

    return array;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值