1. 程式人生 > >leetcode--加一

leetcode--加一

加一

問題描述

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

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

你可以假設除了整數 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; } }