题目描述
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0]
输出:[1]
提示:
1 <= digits.length <= 100
0 <= digits[i] <= 9
解题思路
- C
int* plusOne(int* digits, int digitsSize, int* returnSize) { int num = 1; //定义“进位变量” for (int i = digitsSize - 1; i >= 0; i--) { digits[i] = digits[i] + num; // 从最后一位开始加“进位变量” num = digits[i] / 10; // 如果进位了,更新“进位变量” digits[i] = digits[i] % 10; // 更新加“进位变量”后的数字 } *returnSize = digitsSize + num; // 如果还有进位,num 为 1,没有则为 0 int* sum = (int*)malloc(sizeof(int) * *returnSize); // 申请内存 memset(sum, 0, sizeof(int) * *returnSize); // 内存清零 for (int j = digitsSize - 1; j >= 0; j--) { sum[j + num] = digits[j]; // 拷贝数据 } sum[0] += num; // 添加进位 return sum; }