题目:力扣https://leetcode-cn.com/problems/plus-one/
class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
for (int i=n-1;i>=0;i--) {
if (digits[i] != 9) {
digits[i]++;
for (int j=i+1;j<n;j++) {
digits[j] = 0;
}
return digits;
}
}
int[] ans = new int[n+1];
ans[0] = 1;
return ans;
}
}
思路:这题有一个小小的难点,就是进位,一开始忘记考虑这个问题,然后试了几遍错。进位分为两种情况,一种是不需要改变数组长度的,一种是需要改变数组长度的(例如:[9,9]->[1,0,0])。只要把这两个小难点处理了,这道题就能迎刃而解了。
1.处理需要改变数组长度的进位情况。因为这个处理的逻辑非常简单,所以放在第一步,但是实际上代码所处的位置应该是整份代码的最末尾处。新建一个长度为原长度+1的数组,然后把第一位设置为1,其余为0,返回。
int[] ans = new int[n+1];
ans[0] = 1;
return ans;
2.处理普通(不需要改变数组长度)进位的情况。从后往前遍历,先取最后一个元素,判断是否为9(判断是否需要进位),若不需要仅为则正常加一就好了。如果需要进位,则再判断进位后前一位数是否需要再次进位,然后将进位后的位归零。完成上述操作后,返回数组digits。
int n = digits.length;
for (int i=n-1;i>=0;i--) {
if (digits[i] != 9) {
digits[i]++;
for (int j=i+1;j<n;j++) {
digits[j] = 0;
}
return digits;
}
}