1. 程式人生 > >LeetCode--初級演算法--陣列篇-加一

LeetCode--初級演算法--陣列篇-加一

題目

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

最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。

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

示例1:

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

示例1:

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

解法:

解決這個題目,剛開始的時候想了很多辦法,一開始,定義了一個long long 型別的變數,將陣列總的每個元素*10^n 進行累加,然後加一,然後在拆解,但是由於陣列是沒有數字型別限制的,所以,執行以後會出錯。故舍棄。
然後,又利用了,從最後一個數組元素開始,判斷是否為9,如果是,完前一個元素加1。但是,這樣又會吧前面出現9的也考慮進去。因此,採用網上提供的思路:
考慮的時候,從後向前考慮。最後一項如果不為9.則直接將最後一項加一。然後退出函式。
如果最後一項為9.則將改項賦值為0.考慮前一項是否為9.不為9,則加一,退出函式,否則繼續判斷。如果全部為9.則需要把陣列擴充一位。第一位為1.其他全部為0.

程式碼

/**
 * 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 *retBuf,i = 0;
    retBuf = (int*)malloc((digitsSize+1)*sizeof(int));
    (*returnSize) = digitsSize;
    int
sum9Index = 0; for(i = digitsSize-1; i >= 0; i--) { //從後往前考慮,當前元素不為9 if(digits[i] < 9) { digits[i]++; return digits;//加一後,直接退出 } digits[i] = 0; } //執行到此處,說明全部為9. (*returnSize)++; retBuf[0] = 1; return retBuf; }