leetcode--加一
阿新 • • 發佈:2018-12-21
加一
問題描述
題目地址
給定一個由整陣列成的非空陣列所表示的非負整數,在該數的基礎上加一。
最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
示例1:
輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入陣列表示數字 123。
示例2:
輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入陣列表示數字 4321。
思路
這裡的整數每一位都是存放在一個數組內的,按照加法運算,從陣列的最後一位開始加一就行,需要處理的就是如果該位上是9,那加一就需要進位,該位變成零,如果該位小於9,則加一就終止;還有一種情況,如果各個位都是9,比如99,那加一就是100,這時,陣列的長度變了,所以就看如果迴圈到了第一位,說明最後需要進位,那陣列長度就加一。
程式碼
/**
* 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 i;
for(i=digitsSize-1;i>=0;i--)
{
if(digits[i]!=9) //該位小於9,加一後不會進位
{
digits[ i]+=1;
break;
}
else //該位等於9,加一需進位,該位變為0
{
digits[i]=0;
}
}
if(i>=0) //說明沒有迴圈到第一位
{
*returnSize=digitsSize;
return digits;
}
else
{
// 用calloc函式,分配空間,並自動初始化陣列為0
int* ret=(int *)calloc(digitsSize+1 ,sizeof(int));
if(ret==NULL) return NULL;
ret[0]=1; //第一位變為1
*returnSize=digitsSize+1;
return ret;
}
}