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 []