题目:加一
思路
参考链接:Java 数学解题
给定一个非负整数要求加1。重点是要理解这个加1,只加1则所有可能的情况只能是两种:
- 除9之外的数字加1;
- 数字9
算法:
- 从个位 ( 在数组的最右边 ) 开始加1,然后判断需不需要进位,若要进位 则十位上的数也是要加1,然后判断需不需要进位。依次类推每加1,就要判断需不需要进位 ——————可以用for循环来控制
- 如何判断 要不要进位呢?只有9加1后才需要进位,9+1=10,10%10=0 , 非9个的个位数 模10 的结果仍然是自己 ——————所以每次加1后把当前的数重新赋值为 自身模10的结果,结果为0,则要进位,继续for循环。 若结果不是0,则说明不需要进位了,直接返回现在的数组即可。
- 如果循环完了,还没有return digits,则此时数组中的数字一定都是0,也就是说加1之前的数字全都是9
- 那么此时直接把数组长度加1
- 把第一个数初始化为1,后面的不管,默认为0即可
代码(java)
class solution{
public int[] plusOne(int[] digits){
for(int i = digits.length - 1; i>=0; i--){
digits[i]++;
digits[i] = digits[i] % 10;
if(digits[i]!=0) return digits;
}
//如果此时循环完了还没return digits,则此时数组中的数字一定都是0,也就是说加1之前的数字是全是9的情况
digits = new int[digits.length +1]; //那么此时直接把数组长度加1
digits[0] = 1; //把第一个数初始化为1,后面的不管,默认为0即可!!
return digits;
}
}