【题目概要】
66. 加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
【思路分析】
- 从数组的最后一位开始加,仅仅整体+1,而不是每一位都加1
【代码示例】
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* plusOne(int* digits, int digitsSize, int* returnSize){
//申请的数组空间是比加数大1,若是字符串相加或加1,则需要空间+2,最后一位放置’\0‘,还有一位进位
int *re = (int*)malloc(sizeof(int)*(digitsSize+1));
int reindex = digitsSize;
//末尾的数肯定是要+1,则设置addflag = 1
int addflag = 1;
for(int index=digitsSize-1; index>=0; index--)
{
int temp = digits[index] + addflag;
if(temp > 9)
{
re[reindex--] = temp - 10;
addflag = 1;
}
else
{
re[reindex--] = temp;
addflag = 0;
}
}
if(addflag)
re[0] = 1;
// 从后往前算,确定开始位置和数据长度
*returnSize = digitsSize + addflag;
return re + (1-addflag);
}