LeetCode 547. Number of Provinces in F#
URL
leetcode.com/problems/number-of-provinces
Code
github.com/syohex/dotnet-study/blob/master/..
let findCircleNum (isConnected: int list []) : int =
let rec moveNext nodes (isConnected: int list []) visited =
match nodes with
| [] -> visited
| node :: rest ->
let nodes' =
isConnected.[node]
|> List.mapi (fun i n -> i, n)
|> List.filter (fun (i, n) -> n = 1 && (Set.contains i visited |> not))
|> List.fold (fun acc (i, _) -> i :: acc) rest
let visited' =
nodes'
|> List.fold (fun acc n -> Set.add n acc) visited
moveNext nodes' isConnected visited'
let rec findCircleNum' i (isConnected: int list []) visited ret =
if i = isConnected.Length then
ret
else if Set.contains i visited then
findCircleNum' (i + 1) isConnected visited ret
else
let visited' =
moveNext [ i ] isConnected (Set.add i visited)
findCircleNum' (i + 1) isConnected visited' (ret + 1)
findCircleNum' 0 isConnected Set.empty 0