LeetCode 402. Remove K Digits in F#

URL

Remove K Digits - LeetCode

Code

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

open System

let removeKDigits (num: string) (k: int) : string =
    let rec popBiggerNumber stack num k =
        if k = 0 then
            stack, 0
        else
            match stack with
            | [] -> [], k
            | h :: t -> if h > num then popBiggerNumber t num (k - 1) else stack, k

    let rec removeKDigits' cs k stack =
        match cs with
        | [] -> List.rev stack, k
        | h :: t ->
            let stack', k' = popBiggerNumber stack h k
            removeKDigits' t k' (h :: stack')

    let stack, k' = removeKDigits' (Seq.toList num) k []
    let stack = List.skip k' stack
    let stack = List.skipWhile ((=) '0') stack

    match stack with
    | [] -> "0"
    | _ -> String.Concat stack