1. Descripción del tema
Dado un número entero no negativo representado por una matriz no vacía de números enteros, agregue uno a ese número.
El dígito más alto se almacena en la primera posición de la matriz y cada elemento de la matriz almacena solo un número.
Puede suponer que este entero no comenzará con cero excepto el entero 0.
Ejemplo 1:
Entrada: dígitos = [1,2,3]
Salida: [1,2,4]
Explicación: La matriz de entrada representa los dígitos 123.Ejemplo 2:
Entrada: dígitos = [4,3,2,1]
Salida: [4,3,2,2]
Explicación: La matriz de entrada representa el número 4321.Ejemplo 3:
Entrada: dígitos = [0]
Salida: [1]insinuación:
1 <= digits.length <= 100
0 <= digits[i] <= 9
Ideas:
De acuerdo al significado de la pregunta, agrega uno, sí, es muy importante agregar uno, porque es solo uno, por lo que solo hay dos situaciones posibles:
- Agregue uno a los números que no sean 99;
- Número 99.
Agregue uno para obtener el dígito decimal 00. Si no hay acarreo en la operación de suma, la operación finaliza y el acarreo solo será uno.
Por lo tanto, solo es necesario juzgar si hay un acarreo y simular su método de acarreo, como agregar 11 dígitos al dígito de las decenas y establecerlo en 00, y luego repetir hasta que se juzgue que no hay más acarreo, luego salir del bucle y devolver el resultado.
Luego, hay algunos casos especiales en los que cuando hay números como 9999 y 999999, el bucle también debe llevarse al final. En este caso, debe ser llevado manualmente por uno.
2. Código central
// @solution-sync:begin
class Solution {
public int[] plusOne(int[] digits) {
int len = digits.length - 1;
for (int i = len; i >= 0; i--) {
digits[i]++;
digits[i] = digits[i] % 10;
if (digits[i] != 0)
return digits;
}
//如果所有位的值都是9需要进位,则长度+1
digits = new int[digits.length + 1];
//首位的值设置为1,其余位输出为0
digits[0] = 1;
return digits;
}
}
3. Código de prueba
import jdk.nashorn.internal.ir.ReturnNode;
import java.lang.StringBuilder;
// @solution-sync:begin
class Solution {
public int[] plusOne(int[] digits) {
int len = digits.length - 1;
for (int i = len; i >= 0; i--) {
digits[i]++;
digits[i] = digits[i] % 10;
if (digits[i] != 0)
return digits;
}
//如果所有位的值都是9需要进位,则长度+1
digits = new int[digits.length + 1];
//首位的值设置为1,其余位输出为0
digits[0] = 1;
return digits;
}
}
// @solution-sync:end
class Main {
public static void main(String[] args) {
int[] digits = new int[]{1, 2, 3};
int[] result = new Solution().plusOne(digits);
System.out.println(toString(result));
}
private static String toString(int[] arr) {
StringBuilder buf = new StringBuilder();
buf.append("[");
for (int i = 0; i < arr.length; i++) {
if (i != 0)
buf.append(",");
buf.append(arr[i]);
}
buf.append("]");
return buf.toString();
}
}