描述#
給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。
最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
示例 1:
輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入數組表示數字 123。
示例 2:
輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入數組表示數字 4321。
思路#
- 不同數組操作主要分為最後一位為 9 的和不為 9 的,若最後一位不為 9,則最後一位加一輸出即可
- 若最後一位為 9,又可分為全為 9 和不全為 9,全為 9 時數組大小加一,且除第一位為 1 外其他全為 0
- 不全為 9 時,從後往前遍歷數組,若為 9 則置為 0,若不為 9 則加一直接返回
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* plusOne(int* digits, int digitsSize, int* returnSize){
int* result;
//最後一位不是9
if(digits[digitsSize - 1] != 9) {
result = (int*)malloc(sizeof(int)*digitsSize);
memcpy((void*)result,(void*)digits,sizeof(int)*digitsSize);
*returnSize = digitsSize;
result[digitsSize - 1] = digits[digitsSize - 1] + 1;
return result;
}
/*最後一位是9*/
for(int i=digitsSize - 1;;i--) {
if(digits[i] != 9)
break;
if(i == 0) {
//全都為9
*returnSize = digitsSize + 1;
result = (int*)malloc(sizeof(int)*(*returnSize));
result[0] = 1;
for(int j=1;j<*returnSize;j++)
result[j] = 0;
return result;
}
}
//不全為9
*returnSize = digitsSize;
result = (int*)malloc(sizeof(int)*(digitsSize));
int not_9_num = digitsSize - 1;
for(;not_9_num >= 0;not_9_num--) {
if(digits[not_9_num] != 9)
break;
result[not_9_num] = 0;
}
memcpy(result,digits,sizeof(int) * (not_9_num + 1));
result[not_9_num] = digits[not_9_num] + 1;
return result;
}