如题所述,要在用数组表示的数值上加1,其中数组里每个位置上的数值表示十进制的一位。这里存在一个问题:这个数字是大端表示还是小端表示?根据测试用例我们可以看到是大端表示。
一种直觉的解法是按照加法的操作,对个位数加一然后看有没有进位,循环处理进位。如果处理到最后还有进位,就重开一个大小比原来数组大1的数组,并且将最高位置为1,其他位为0。
代码如下。
1 | public int[] plusOne(int[] digits) { |
但是这个代码并不是很简洁。实际上,我们并不需要按照加法的法则去处理这个问题。我们可以观察输入和输出。
如果个位数小于9,那么只需要个位数自增就可以返回结果。如果个位数是9,那么需要进位,也就是个位数变成0,同时向十位数进位。
如果十位数小于9,那么只需要十位数自增就可以返回结果,如过十位数是9,那么需要进位,也就是十位数变成0,同时向百位数进位。
…
通过一个循环就可以处理整个加法。如果循环到最后都没有返回,那么就可以确定所有位置原来的数字都是9。我们只需要开辟一个新的大小为原数组大小加1的数组,并且将数字的最高为置为1即可。
代码如下。
1 | public int[] plusOne(int[] digits) { |