1. 程式人生 > >Leetcode演算法題(C語言)8--加一

Leetcode演算法題(C語言)8--加一

題目:加一

給定一個由整陣列成的非空陣列所表示的非負整數,在該數的基礎上加一。
最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。

示例 1:

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

示例 2:

輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入陣列表示數字 4321。

程式碼實現:

/*
 * 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 len = digitsSize; int flag = 1; int bak_array[digitsSize + 1]; int * array; /* 進位實現 */ for(int i = digitsSize - 1; i >= 0; i--) { if(digits[i] + flag > 9) { if(i == 0) {
bak_array[i] = 1; bak_array[digitsSize] = 0; len = digitsSize + 1; } else { bak_array[i] = 0; } flag = 1; } else { bak_array[i] = digits[i] +
flag; flag = 0; } } /* 為陣列分配空間 */ array = (int *)malloc(sizeof(int) * len); /* 返回陣列大小賦值 */ *returnSize = len; /* 將資料拷貝到動態分配的陣列 */ memcpy(array, bak_array, sizeof(int) * len); return array; }

難點:
(1) 如果只有一位或者到了第一位進位後大於9,那麼把第一位置1,最後一位的後一位置0.
(2) 如果不是第一位且加一後大於9,那麼把該位置0並向前一位進位。
(3) 如果當前位加一不大於9,則不進行進位操作。