addToArrayForm-Integer suma en forma de matriz

Título

Para el entero no negativo X, la forma de matriz de X es una matriz formada por cada dígito de izquierda a derecha. Por ejemplo, si X = 1231, entonces su forma de matriz es [1,2,3,1].

Dada la forma de matriz A del entero no negativo X, devuelve la forma de matriz del entero X + K.

Ejemplo 1:

Entrada: A = [1,2,0,0], K = 34
Salida: [1,2,3,4]
Explicación: 1200 + 34 = 1234

Ejemplo 2:

Entrada: A = [2,7,4], K = 181
Salida: [4,5,5]
Explicación: 274 + 181 = 455

Ejemplo 3:

Entrada: A = [2,1,5], K = 806
Salida: [1,0,2,1]
Explicación: 215 + 806 = 1021

Ejemplo 4:

Entrada: A = [9,9,9,9,9,9,9,9,9,9], K = 1
Salida: [1,0,0,0,0,0,0,0,0, 0,0]
Explicación: 9999999999 + 1 = 10000000000

inmediato:

1 <= A. longitud <= 10000
0 <= A [i] <= 9
0 <= K <= 10000
如果 A. longitud> 1 , 那么 A [0]! = 0

Matriz de temas relacionados

Ideas para resolver problemas

1. En primer lugar, no podemos determinar la longitud de los dos números, pero según el significado de la pregunta, k es un número entero y el valor máximo de k no excederá de 10000, por lo que si la longitud de k es mayor que o igual a la matriz a, que significa que los dos números son los mismos la adición no será mayor que INTEGET.MAX_VALUE
2. Si la longitud de la matriz es mayor que k, puede ser mayor que el entero más grande. el
detallado La resolución de problemas se presentará en el código uno por uno (preste atención a la operación y al procesamiento detallado)

Demostración de código:

class Solution {
    public  List<Integer> addToArrayForm(int[] A, int K) {
        int alen = A.length-1;
        List<Integer> res=new ArrayList<>();
        int flag=0;//标志位,如果两个对应位置相加超过个位数,则为1,代表进1.
        //这一重循环主要是比较k的长度和alen的长度大小,从低位到高位运算,将结果保存到res中
        while (K!=0&&alen!=-1)
        {
            if(K%10+A[alen]+flag<10)
            {
                res.add(K%10+A[alen]+flag);
                flag=0;
            }
            else {
                res.add((K%10+A[alen]+flag)%10);
                flag=1;
            }
            K=K/10;
            alen--;
        }
        //数组元素长度小于等于k的长度
        if (alen==-1)
        {
            //求出剩余整数k与flag的值
            //(k的细节处理-------------------------------------------------)
            K=K+flag;
            //新的k是0的情况,意思是所有数都耗光了
            if(K==0)
            {
                Collections.reverse(res);
                return res;
            }
            //k不是0,新k有剩余
            while (K!=0)
            {
                res.add(K%10);
                K=K/10;
            }
        }
        //数组元素还存在的情况,此时k应该为0,flag不知道有没有
        else {
            while (alen!=-1)
            {
                if(A[alen]+flag<10)
                {
                    res.add(A[alen]+flag);
                    alen--;
                    flag=0;
                    //(当flag可以舍弃时,直接break,跳到下面,注意细节
                   // -------------------------------------)
                    break;
                }else {
                    res.add((A[alen]+flag)%10);
                    flag=1;
                    alen--;
                }
            }
            while (alen!=-1)
            {
                res.add(A[alen]);
                alen--;
            }

            if(flag==1)
                res.add(flag);
        }
        Collections.reverse(res);
        return res;
    }
}

Presentación de resultados

La
respuesta de información fue exitosa:
tiempo de ejecución: 4 ms, derrotando al 86.63% de los usuarios de Java
Consumo de memoria: 40.1 MB, derrotando al 34.70% de los usuarios de Java

Supongo que te gusta

Origin blog.csdn.net/tangshuai96/article/details/112980118
Recomendado
Clasificación