LeetCode 2. Add Two Numbers in F#
URL
leetcode.com/problems/add-two-numbers
Code
github.com/syohex/dotnet-study/blob/master/..
type LinkedList =
| ListEnd
| ListNode of int * LinkedList
static member toList lst =
let rec toList' lst acc =
match lst with
| ListEnd -> acc |> List.rev
| ListNode (v, rest) -> toList' rest (v :: acc)
toList' lst []
static member toNumber lst =
lst
|> LinkedList.toList
|> List.fold (fun acc n -> acc * 10 + n) 0
let addTwoNumbers (l1: LinkedList) (l2: LinkedList) : LinkedList =
let rec addTwoNumbers' l1 l2 carry =
match l1, l2 with
| ListEnd, ListEnd ->
if carry <> 0 then
ListNode(carry, ListEnd)
else
ListEnd
| ListNode (v1, rest1), ListEnd ->
let sum = v1 + carry
ListNode(sum % 10, addTwoNumbers' rest1 l2 (sum / 10))
| ListEnd, ListNode (v2, rest2) ->
let sum = v2 + carry
ListNode(sum % 10, addTwoNumbers' l1 rest2 (sum / 10))
| ListNode (v1, rest1), ListNode (v2, rest2) ->
let sum = v1 + v2 + carry
ListNode(sum % 10, addTwoNumbers' rest1 rest2 (sum / 10))
addTwoNumbers' l1 l2 0