LeetCode66: Plus One

来源:互联网 发布:天谕玉虚男捏脸数据 编辑:程序博客网 时间:2024/06/02 21:10

Given a non-negative number represented as an array of digits, plus one to the number.

The digits are stored such that the most significant digit is at the head of the list.

问题需求:给与一个整型数组(一串数字),整个数组用来表示一个整数(意思就是数组元素的值只可能是0-9),然后返回这个整数加一的值。

问题分析:关键就是进位问题,从数组的最后一位(即一个数的最低位)开始遍历,找到第一个不等于9的数字(在遍历的过程当中,将所有等于九的数置零),如果能够找得到,将该数字加一然后直接返回原来数组即可。否则,重新开辟存储空间,空间个数比原来的数组个数多一,将最高位设置成1,其余各位都等于零,返回即可。

/** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */int* plusOne(int* digits, int digitsSize, int* returnSize) {    /*    从最低位开始查找,找到第一个小于九的数,    如果能找到,将该数加一,然后返回,    否则,重新创建一个数组,元素个数比原来多一个,最高位的值为一,其余各位都是零。    */    int* p = digits+digitsSize-1;//让p指向数组最后一个元素    int* q = NULL;//如果整串数字全都是九这个指针才用得上    // 找到第一个不进位得数    while( *p==9&&p>=digits ){        *p = 0;//由于进位的问题所有原来等于九的数,都变成零        p--;    }    // 如果找到了第一个不用进位得数    if(p>=digits){        (*p)+=1;        *returnSize = digitsSize;        return digits;    }    // 如果整串数字都等于九    *returnSize = digitsSize+1;//设置新的数组尺寸    p = (int*)malloc(sizeof(int)*(*returnSize));//重新申请内存空间    q = p+1;        *p = 1;//先把数组最高位设置一    while( q-p<*returnSize ){//其余各位都等于零        *q = 0;        q++;    }    return p;}




0 0
原创粉丝点击