LeetCode 1770. Maximum Score from Performing Multiplication Operations in F#

URL

leetcode.com/problems/maximum-score-from-pe..

Code

github.com/syohex/dotnet-study/blob/master/..

let maximumScore (nums: int list) (multipliers: int list) : int =
    let rec maximumScore' left right multipliers (nums: int []) cache =
        match multipliers with
        | [] -> 0, cache
        | h :: t ->
            match Map.tryFind (left, right) cache with
            | Some (v) -> v, cache
            | None ->
                let val1, cache' =
                    maximumScore' (left + 1) right t nums cache

                let val2, cache'' =
                    maximumScore' left (right - 1) t nums cache'

                let leftVal = val1 + nums.[left] * h
                let rightVal = val2 + nums.[right] * h

                let ret = System.Math.Max(leftVal, rightVal)
                ret, Map.add (left, right) ret cache''

    let nums' = nums |> List.toArray

    maximumScore' 0 (nums.Length - 1) multipliers nums' Map.empty
    |> fst