LeetCode002-Suma dos números-medio

Pregunta: Proporcione dos listas enlazadas que no estén vacías para representar dos números enteros no negativos . Entre ellos, sus respectivos dígitos se almacenan en orden inverso , y cada nodo solo puede almacenar un dígito. Si sumamos estos dos números, se devolverá una nueva lista enlazada para representar su suma. Puede asumir que ninguno de estos números comienza con 0 excepto el número 0

Ejemplo:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

Ideas de resolución de problemas:

La pregunta dice que los dígitos respectivos se almacenan en la lista vinculada en orden inverso. De hecho, esto reduce la dificultad, porque cuando se acaba de realizar la suma, la suma comienza desde el dígito de las unidades y la lista vinculada comienza desde el dígito bajo. de adelante hacia atrás, que solo se ajusta al orden de las operaciones para sumar (tome los datos dados en la pregunta como ejemplo)

Dado que es una suma, no es difícil saberlo, saque cada nodo en las dos listas vinculadas y luego realice la suma (suma), si es mayor que 10, registre un acarreo 1, y luego lleve la suma a calcule el resto de 10 y obtenga el resultado Es el primer nodo válido de la lista vinculada de destino. El proceso específico se muestra en la figura:

Proceso de implementación:

1. El método principal es recorrer las dos listas vinculadas y luego sumar los nodos uno por uno

  • Como no sé el número de nodos en la lista vinculada de estos dos requisitos (es decir, no sé el número de bucles), elijo el bucle while. Siempre que el nodo de cualquier lista vinculada no sea nulo, debe continuar el ciclo
  • Pero debido al estuche de transporte, cuando el acarreo no es 0, el bucle no se puede detener (por ejemplo, 9999 + 1)

2. Genere una nueva lista vinculada para almacenar el resultado de la suma.

  • Para el problema de la lista enlazada, generalmente se crea un nodo de marca, no almacena un valor específico, y su siguiente se encarga de apuntar al primer nodo válido (siempre apuntando al primero, sin moverse), principalmente por conveniencia de volviendo a la lista vinculada de destino.
  • Al mismo tiempo, se necesita crear un nodo actual, que se encarga de generar cada nodo, que es móvil, y se genera cada nodo, se necesita mover un nodo hacia atrás para realizar la construcción de una nueva lista enlazada.

La habilidad del lenguaje es un poco pobre y la descripción puede no ser muy clara. Hay comentarios necesarios en el código, espero que pueda ayudar a entender

Código

class ListNode
{
    public $val = 0;
    public $next = null;
    public function __construct($val)
    {
        $this->val = $val;
    }
}

class LeetCode002
{
    /**
     * @param ListNode $l1
     * @param ListNode $l2
     * @return ListNode
     */
    public function addTwoNumbers($l1, $l2)
    {
        if ($l1 == null && $l2 == null) {
            return null;
        }

        $tag = new ListNode(0);//创建空节点
        $current = $tag;
        $addOne = 0;//进位
        while ($l1 != null || $l2 != null || $addOne != 0) {
            $val1 = $l1 == null ? 0 : $l1->val;
            $val2 = $l2 == null ? 0 : $l2->val;
            $sum = $val1 + $val2 + $addOne;
            $current->next = new ListNode($sum % 10);
            $current = $current->next;
            $addOne = intval($sum / 10);//坑,强类型语言不存在此问题
            if ($l1 != null) {
                $l1 = $l1->next;
            }
            if ($l2 != null) {
                $l2 = $l2->next;
            }
        }
        return $tag->next;
    }
}

//Test Case
$leetCode = new LeetCode002();
$l1 = new ListNode(2);
$l1->next = new ListNode(4);


$l2 = new ListNode(5);
$l2->next = new ListNode(6);

$newList = $leetCode->addTwoNumbers($l1, $l2);
$str = '';
while ($newList != null) {
    $str .= $newList->val.'->';
    $newList = $newList->next;
}

echo $str;

Resultados de la

[Error al transferir la imagen del enlace externo. El sitio de origen puede tener un mecanismo de enlace anti-sanguijuela. Se recomienda guardar la imagen y subirla directamente (img-HYvXTrXs-1596157723434) (https: //imgkr2.cn-bj.ufileos. com / 0e5487e6-8aa9-445d -867d-6d270a62a350.png? UCloudPublicKey = TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13 & Signature = kk9GWabE% 252FBu3J484b3D96]

Supongo que te gusta

Origin blog.csdn.net/self_realian/article/details/107705783
Recomendado
Clasificación