Leetcode演算法題(C語言)8--加一
阿新 • • 發佈:2018-12-12
題目:加一
給定一個由整陣列成的非空陣列所表示的非負整數,在該數的基礎上加一。
最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。
你可以假設除了整數 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,則不進行進位操作。