版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
加一
题目描述:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
解题思路:这一题就是在模拟我们初学多位数加法的方法,然后要注意的是C语言必须一开始就要声明一个固定大小的数组,所以要先确定返回的位数,如果全是9,那么+1之后,就要多一位,还有就是注意9+1之后进位的问题,仔细一点即可。
int* plusOne(int* digits, int digitsSize, int* returnSize){
int i,size,count_9,jw,j;
count_9=0;
for(i=0;i<digitsSize;i++){
if(digits[i]==9){
count_9++;
}
}
size=(count_9==digitsSize)?digitsSize+1:digitsSize;
int *result=(int *)malloc(sizeof(int)*size);
*returnSize=size;
j=size-1;
for(i=digitsSize-1;i>=0;i--){
if(i==digitsSize-1){
if(digits[i]+1==10){
result[j]=0;
j--;
jw=1;
}
else{
result[j]=digits[i]+1;
j--;
jw=0;
}
}
else{
if(digits[i]+jw==10){
result[j]=0;
j--;
jw=1;
}
else{
result[j]=digits[i]+jw;
j--;
jw=0;
}
}
}
if(jw==1){
result[j]=1;
}
return result;
}