LeetCode 413. Arithmetic Slices in F#

URL

leetcode.com/problems/arithmetic-slices

Code

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

let numberOfArithmeticSlices (nums: int list) : int =
    let countSlices count =
        if count < 3 then
            0
        else
            let n = count - 3 + 1
            n * (1 + n) / 2

    let rec numberOfArithmeticSlices' nums prev2 prev1 count ret =
        match nums with
        | [] -> ret + countSlices count
        | x :: xs ->
            if (x - prev1) = (prev1 - prev2) then
                numberOfArithmeticSlices' xs prev1 x (count + 1) ret
            else
                numberOfArithmeticSlices' xs prev1 x 2 (ret + countSlices count)

    match nums with
    | []
    | _ :: []
    | _ :: _ :: [] -> 0
    | prev2 :: prev1 :: xs -> numberOfArithmeticSlices' xs prev2 prev1 2 0