66.加一

题目描述

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

1
2
3
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:

1
2
3
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

题解

思路

操作数组元素,模拟加法

  1. 个位小于9时,直接加一,返回即可
  2. 个位等于9时,就该进位了,所以将其置为0
  3. 循环1、2步
  4. 当执行完毕后,程序仍未返回值,则是最特殊的情况,即各位都是9:
  5. 此时,需要重新申请空间,最高位为1,其余为0

C:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int* plusOne(int* digits, int digitsSize, int* returnSize)
{
int i = digitsSize - 1;
for (i; i >= 0; i--) {
if (digits[i] < 9) {
digits[i]++;
*returnSize = digitsSize;
return digits;
}
digits[i] = 0;
}
int* aaa = (int*)malloc((digitsSize + 1) * sizeof(int));
aaa[0] = 1;
for (i = 1; i < (digitsSize + 1); i++)
aaa[i] = 0;
*returnSize = digitsSize + 1;
return aaa;
}

思路

没其他tag了,有没有啥骚方法呢?

把数组变成整数,加个一,再变成数组,行不行呢?

Python:

1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
nums_str = str(digits)[1:-1]
nums_int = int(nums_str.replace(", ", ""))
nums_int += 1
res = []
while nums_int > 0:
num = nums_int % 10
res.append(num)
nums_int = nums_int // 10
res.reverse()
return res