Plus One
思路一: 暴力,方向想错了,不能把 digits 当做一个整数看
public int[] plusOne(int[] digits) {
if (digits[digits.length - 1] != 9) {
digits[digits.length - 1]++;
return digits;
}
int[] result = new int[digits.length + 1];
int i = digits.length - 1;
while (i >= 0 && digits[i] == 9) {
result[i+1] = 0;
i--;
}
if (i >= 0) {
result[i+1] = digits[i] + 1;
i--;
while (i >= 0) {
result[i + 1] = digits[i];
i--;
}
} else {
result[0] = 1;
}
if (result[0] == 0) {
int[] result2 = new int[digits.length];
System.arraycopy(result, 1, result2, 0, result2.length);
return result2;
}
return result;
}
思路二: 模拟加法进位操作,在原数组上进行运算。
需要计算的数组完全分类,就两种情况
- 全部是 9 ,直接返回 1 开头,其余位置为 0 的新数组
- 有位置不是 9,对每个位置做进行判断,遇到无法进位时,直接 +1 返回结果
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
if (digits[i] == 9) {
digits[i] = 0;
} else {
digits[i] += 1;
return digits;
}
}
digits = new int[digits.length + 1];
digits[0] = 1;
return digits;
}
标签:digits,return,easy,int,result2,length,result,66,leetcode
From: https://www.cnblogs.com/iyiluo/p/16780091.html