LeetCode 2073. Time Needed to Buy Tickets in F#

URL

Time Needed to Buy Tickets - LeetCode

Code

https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/challenge/202404/time_needed_to_buy_tickets/main.fsx

let timeRequiredToBuy (tickets: int list) (k: int) : int =
    let rec timeRequiredToBuy' (tickets: int[]) i k ret =
        if i >= tickets.Length then
            timeRequiredToBuy' tickets 0 k ret
        elif tickets.[i] = 0 then
            timeRequiredToBuy' tickets (i + 1) k ret
        else
            tickets.[i] <- tickets.[i] - 1
            let ret' = ret + 1

            if i = k && tickets.[i] = 0 then
                ret'
            else
                timeRequiredToBuy' tickets (i + 1) k ret'

    timeRequiredToBuy' (List.toArray tickets) 0 k 0