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