Add Two NUmbers
Add Two Numbers
Este problema consisten en dadas dos listas ligadas las cuales tienen los digitos de un numero entero en reversa y el problema consiste en sumar estos dos valores y regresar otra lista ligada en reversa con los digitos de el resultado
Solucion
# Definition for singly-linked list.
# class ListNode
# attr_accessor :val, :next
# def initialize(val = 0, _next = nil)
# @val = val
# @next = _next
# end
# end
# @param {ListNode} l1
# @param {ListNode} l2
# @return {ListNode}
def get_num(node)
num = 0
mul = 1
while node != nil
num += (mul * node.val)
mul = mul * 10
node = node.next
end
return num
end
def add_two_numbers(l1, l2)
n = get_num(l1)
n1 = get_num(l2)
res = n + n1
puts n
puts n1
node = ListNode.new
ref = node
while true
node.val = res % 10
res = res / 10
if res != 0
node.next = ListNode.new
node = node.next
else
break
end
end
return ref
end
Este programa conciste primero en encontrar los dos numeros que debemos sumar, itera la lista en su orden normal y cada vez que encuentra un numero este es multiplicado por un multiplicador y sumado al valor total, este multiplicador aumenta en 10 con cada iteracion.
Luego suma los numeros de forma normal y hace el proceso inverso
Pero encontre estas dos soluciones
# Definition for singly-linked list.
# class ListNode
# attr_accessor :val, :next
# def initialize(val = 0, _next = nil)
# @val = val
# @next = _next
# end
# end
# @param {ListNode} l1
# @param {ListNode} l2
# @return {ListNode}
def add_two_numbers(l1, l2)
result = l1
remain = 0
1.upto(100) do |index|
remain = l1.val + l2.val + remain
l1.val = remain % 10
remain /= 10
if !l1.next && l2.next
l1.next = l2.next
l1 = l1.next
l2.next = nil
l2.val = 0
next
elsif !l1.next && !l2.next
l1.next = ListNode.new(remain) if remain.positive?
break
end
l1 = l1.next if l1.next
if l2.next
l2 = l2.next
else
l2.val = 0
end
end
result
end
Este programa toma otra alternativa, suma los numeros como los va leyendo y si la suma de los numeros es superior o igual a 10 guarda el residuo y lo aƱade al siguiente, este codigo no crea una nueva lista, pues guarda los nuevos valores en un nuevo array