LeetCode 1680. Concatenation of Consecutive Binary Numbers in F#

URL

leetcode.com/problems/concatenation-of-cons..

Code

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

let concatenatedBinary (n: int) : int =
    let rec concat n acc =
        if n = 0 then
            acc
        else
            concat (n / 2) ((n % 2) :: acc)

    let rec concatNum i n acc =
        if i > n then
            acc
        else
            let bits = concat i []
            concatNum (i + 1) n (acc @ bits)

    let rec concatenatedBinary' bits (acc: int64) =
        match bits with
        | [] -> acc % 1_000_000_007L
        | h :: t ->
            let acc' = (acc * 2L + (int64 h)) % 1_000_000_007L
            concatenatedBinary' t acc'

    let bits = concatNum 1 n []
    concatenatedBinary' bits 0L |> int