LeetCode 931. Minimum Falling Path Sum in F#

URL

leetcode.com/problems/minimum-falling-path-..

Code

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

let minFallingPathSum (matrix: int[,]) : int =
    let rows = Array2D.length1 matrix
    let cols = Array2D.length2 matrix
    let dp = Array2D.create rows cols None

    seq { 0 .. (cols - 1) } |> Seq.iter (fun i -> dp.[0, i] <- Some(matrix.[0, i]))

    for i in 1 .. (rows - 1) do
        for j in 0 .. (cols - 1) do
            if j >= 1 then
                dp.[i, j] <- Some(dp.[i - 1, j - 1].Value + matrix.[i, j])

            if Option.isSome dp.[i, j] then
                dp.[i, j] <- Some(System.Math.Min(dp.[i, j].Value, dp.[i - 1, j].Value + matrix.[i, j]))
            else
                dp.[i, j] <- Some(dp.[i - 1, j].Value + matrix.[i, j])

            if j < cols - 1 then
                dp.[i, j] <- Some(System.Math.Min(dp.[i, j].Value, dp.[i - 1, j + 1].Value + matrix.[i, j]))

    dp.[rows - 1, *] |> Array.map (fun v -> v.Value) |> Array.min