2018年1月29日 星期一

[66] Plus One

給一個存在array的數字, (312三百一十二存成 3,1,2這樣)
加一之後回傳新的array,
要注意的應該就是進位的部分吧
因為是easy等級大概只要注意寫對就可以了?
自以為加速的把確定不會進位的先做好像只是自做聰明XD
anyway.


Plus One
/**
 * 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) {
    *returnSize = digitsSize;
    int *ret ;
    if(digits ==NULL || digitsSize==0)
        return ret;

    if(digits[digitsSize-1]<9)
    {
        digits[digitsSize-1] += 1;
        ret = malloc (sizeof(int)*(digitsSize));
        memcpy(ret,digits,sizeof(int)*(digitsSize));
        return ret;
    }
    int i,tenflag=1;
    digits[digitsSize-1] = 0;
    for(i=digitsSize-2;i>=0;i--)
    {
        if(digits[i]+tenflag >= 10)
        {
            digits[i] = 0;
            tenflag = 1;
        }
        else
        {
            digits[i] = digits[i]+tenflag--;
//            tenflag=0;
            break;
        }
    }  
    if (tenflag)
    {
        ret = malloc (sizeof(int)*(digitsSize+1));
        ret[0] = 1;
        memcpy(ret+1, digits, sizeof(int)*(digitsSize));
        *returnSize = digitsSize+1;
    }
    else
    {
        ret = malloc (sizeof(int)*(digitsSize));
        memcpy(ret,digits,sizeof(int)*(digitsSize));
    }

    return ret;
}

沒有留言:

張貼留言