Leetcode989,佔個坑,這個題我覺得體現了編程的本質

Leetcode989
給出自己的AC代碼。
自己的解法,很原始,很繁瑣,需要精煉,抽出共性的代碼段。
而且變量維護做得也很差,程序的出口也比較亂。

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* addToArrayForm(int* A, int ASize, int K, int* returnSize){
    
    int* Karray = (int *)malloc(6*sizeof(int));
    for(int i=0;i<6;i++)Karray[i] =  0;
    int cnt=0;
    while(K!=0){
        Karray[cnt] = K%10;
        K/=10;
        cnt++;
    }
if(ASize>=6){
    int carry = 0;
    int* ans = (int *)malloc((ASize+1)*sizeof(int));
    for(int i=0;i<ASize+1;i++){
        ans[i] = 0;
    }
    for(int i=ASize-1, j=0;i>=0;i--,j++){
        if(j<6){
            ans[i+1] = A[i]+Karray[j]+carry;
            if(ans[i+1]>=10){
                ans[i+1] %= 10;
                carry = 1;
            }else{
                carry = 0;
            }
        }else{
            ans[i+1] = A[i] + carry;
            if(ans[i+1]>=10){
                ans[i+1] %= 10;
                carry = 1;
            }else{
                carry = 0;
            }
        }
    }
    if(carry == 1){
        ans[0] = 1;
    }
    if(ans[0]==0){
        int* retAns = (int *)malloc(ASize*sizeof(int));
        for(int i=0;i<ASize;i++){
            retAns[i] = ans[i+1];
        }
        free(ans);
        *returnSize = ASize;
        return retAns;
    }else{
        *returnSize = ASize+1;
        return ans;
    }
}else{
    int* ans = (int *)malloc(6*sizeof(int));
    for(int i=0;i<6;i++){
        ans[i] = 0;
    }
    int carry = 0;
    for(int i=0;i<6;i++){
        if(i<ASize){
            ans[5-i] = A[ASize-1-i]+Karray[i]+carry;
            if(ans[5-i]>=10){
                ans[5-i]%=10;
                carry = 1;
            }else{
                carry = 0;
            }
        }else{
            ans[5-i] = Karray[i]+carry;
            if(ans[5-i]>=10){
                ans[5-i]%=10;
                carry = 1;
            }else{
                carry = 0;
            }
        }
    }
    for(int i=0;i<6;i++){
        if(ans[i]==0)continue;
        *returnSize = 6-i;
        int* retAns = (int *)malloc((6-i)*sizeof(int));
        for(int j=0;i<6;j++){
            retAns[j] = ans[i];i++;
        }
        free(ans);
        return retAns;
    }
}

    free(Karray);
    int* p = (int*)malloc(sizeof(int));
    *p = 0;
    *returnSize = 1;
    return p;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章