Write a function `multiplication_table(n: int) -> list` that takes an integer `n` (where `n >= 0`) and returns an `n x n` table (list of lists) where the element at row `i` and column `j` (0-indexed) is equal to `(i + 1) * (j + 1)`. For `n == 0`, return an empty list. The result should be a list of rows, each row being a list of integers.