加一
问题描述
题目地址
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 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;
}
}