天天看點

[leetcode]Plus One C語言

【題目】

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.

【題目分析】

這道題的關鍵在于最高位有沒有進位,如果有進位,那麼需要重新申請空間,比原來的長1。

用malloc申請空間。

【具體代碼如下】

/**
 * 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 i;
        int dex=;
        int tmp=;
        int * returns;
    for(i=digitsSize-;i>=;i--)
    {

        tmp=(digits[i]+dex)%;
        dex=(digits[i]+dex)/;
        digits[i]=tmp;
    }
    if(dex==)
        {
        returns=malloc(sizeof(int)*(digitsSize+));
        returns[]=;

        for(i=;i<digitsSize;i++)
        returns[i+]=digits[i];
        *returnSize=digitsSize+;
        return returns;
        }
    if(dex==)
    {  
         *returnSize=digitsSize;
           return digits;
    }
}
           

【自我總結】這道題做的很郁悶,主要原因是傳回值弄錯了,沒有注意到代碼前面給了returnSize的意思,是新數組的大小,真是醉了,我一直都在傳回returnSize。

還有一個問題是在更新digits[i]和dex的時候,開始犯了一個很嚴重的錯誤。

正确的:

tmp=(digits[i]+dex)%10;
dex=(digits[i]+dex)/10;
digits[i]=tmp;
           

錯誤的:

digits[i]=(digits[i]+dex)%10;
dex=(digits[i]+dex)/10;
           

錯誤的代碼中,計算dex的值錯了,上一句digits[i]的值已經被更新,不再是原來的值了,所有第一次dex算錯,導緻後面digits[i+1]………全都算錯。

這是邏輯不嚴密。

另外就是注意下malloc用法,(int *)

繼續閱讀