写在前面
今天我们来学习另外一道难度定义为简单的LeetCode算法题:《加一》。
这道题确实一看就懂,就是一个算法题嘛。下面就来看看我的解题思路吧。
题目解读
从这道题目上来看,是可以通过基本运算搞定的,但是题目中给出的数组长度在1到100之间。
这就说明了只是单纯的将数组中的值输出成整数后加1,然后再转换成数组的方式行不通,因为一个整数的位数根本到不了100位。
所以,根本不能偷懒了,就可以靠着遍历数组,当然了,要倒着遍历,从最开始的加1,就可以实现逐一进位的作用了。
这其中最重要的一个特殊情况,就是最后的数组可能会比原数组的长度大一,因为随着数字进位,可能会多出一个1来。
那么如何解决这个问题,我是进行了单独处理,通过中间值来判断了一下,如果遍历完原数组后,还存在进位情况,就新建一个数组,将首位设置成1,从第二位开始,将原数组直接复制过来即可得到最终结果。
代码实现
这是我的代码实现,大家可以看一下。
public class Solution { public static void main(String[] args) { Solution solution = new Solution(); System.out.println(Arrays.toString(solution.plusOne(new int[]{1, 2, 3}))); } public int[] plusOne(int[] digits) { boolean flag = false; for (int i = digits.length - 1; i >= 0; i--) { int n = digits[i]; if(i == digits.length - 1){ if(n == 9){ digits[i] = 0; flag = true; }else{ flag = false; digits[i] = n + 1; } }else if(flag){ if(n == 9){ digits[i] = 0; }else{ digits[i] = n + 1; flag = false; break; } } } if(flag){ int[] r = new int[digits.length + 1]; r[0] = 1; System.arraycopy(digits, 0, r, 1, r.length - 1); digits = r; } return digits; } }
代码执行结果
还是挺给力的,内存方面的问题,总是避免不了。
总结
进位逻辑,只要搞清了这一点,也就没什么问题了。