LeetCode 3483 Elixir solution

LeetCode 3483 problem link: 3483. Unique 3-Digit Even Numbers


Main idea: we iterate only over 3-digit even numbers.

In Elixir, instead of the classic int count[10], we use a Map. Since the range of digits is fixed to 0..9, the size of the map is still O(1).



Time complexity: O(n)
Space complexity: O(1)


Elixir

defmodule Solution do
  @spec total_numbers(digits :: [integer]) :: integer
  def total_numbers(digits) do
    count =
      Enum.reduce(digits, %{}, fn d, acc ->
        Map.update(acc, d, 1, &(&1 + 1))
      end)

    Enum.count(100..998//2, fn num ->
      a = div(num, 100)
      b = rem(div(num, 10), 10)
      c = rem(num, 10)

      need =
        [a, b, c]
        |> Enum.frequencies()

      Enum.all?(need, fn {d, required} ->
        required <= Map.get(count, d, 0)
      end)
    end)
  end
end