leet_66加一

給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。

最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。

示例 1:

輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入數組表示數字 123。

示例 2:

輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入數組表示數字 4321。
/**
給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。

最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。
*/

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
 /**
 思路一:將數組轉換爲long 類型,然後加以在分解存在越界問題(不採用)
 思路二:從最高位遍歷數組

 */
 #include<stdio.h>
 #include <stdlib.h>

 int* plusOne(int* digits, int digitsSize, int* returnSize){

    *returnSize  = digitsSize;

    if(digits[digitsSize-1] < 9){
        digits[digitsSize-1] +=1;
        return digits;
    }else{
        digits[digitsSize-1] = 0;
    }

    int lock =1;
    int temp = 0;

    for(int i = digitsSize-2 ; i>=0 ; --i ){
            if(digits[i] < 9){
                digits[i] += 1;
                break;
            }
            if(digits[i] == 9 && i!= 0){
                digits[i] = 0;

            }else if(digits[i] == 9&& i== 0){
                temp =1;
                digits[i] = 0 ;



            }
    }
    if(temp ==1 || digitsSize ==1){
        *returnSize += 1;
        int *result = (int *)malloc((*returnSize)*sizeof(int));
        result[0] = 1;
        for(int i =0;i<digitsSize;++i){
            result[i+1] = digits[i];
        }
        return result;
    }else
        return digits;

}

int main(void)
{
    int l1 ,leng;
    printf("Please Input array len :\n");
    scanf("%d",&l1);

    int * arr = (int * )malloc(l1*sizeof(int));
    int i = 0;
    printf("l1 == %d",l1);
    while(i<l1){
        scanf("%d",&arr[i++]);
    }

    int * result = plusOne(arr,l1,&leng);
     for(int i = 0 ; i< leng;++i){
        printf("%d",result[i]);
    }


    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章