LeetCode 47. Permutations II in F#

URL

leetcode.com/problems/permutations-ii

Code

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

let permuteUnique (nums: int list) : int list list =
    let rec permuteUnique' freq limit len acc =
        if len = limit then
            [ acc |> List.rev ]
        else
            freq
            |> Map.fold
                (fun ret k v ->
                    if v = 0 then
                        ret
                    else
                        let r =
                            permuteUnique' (Map.add k (v - 1) freq) limit (len + 1) (k :: acc)

                        r @ ret)
                []

    let freq =
        nums
        |> List.fold
            (fun acc n ->
                match Map.tryFind n acc with
                | None -> Map.add n 1 acc
                | Some (v) -> Map.add n (v + 1) acc)
            Map.empty

    permuteUnique' freq nums.Length 0 [] |> List.rev