LeetCode 1424. Diagonal Traverse II in F#

URL

Diagonal Traverse II - LeetCode

Code

https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/problems/1424/main.fsx

let findDiagonalOrder (nums: int array array) : int list =
    let rows = Array.length nums.[0]

    let toDiagnalDict (nums: int array array) =
        let mutable m = Map.empty

        for i in 0 .. (rows - 1) do
            for j in 0 .. (Array.length nums.[i] - 1) do
                let index = i + j

                match Map.tryFind index m with
                | Some(v) -> m <- Map.add index (nums.[i].[j] :: v) m
                | None -> m <- Map.add index [ nums.[i].[j] ] m

        m

    let rec findDiagonalOrder' i m acc =
        match Map.tryFind i m with
        | None -> acc
        | Some(v) -> findDiagonalOrder' (i + 1) m (acc @ v)

    let m = toDiagnalDict nums
    findDiagonalOrder' 0 m []