Here I would like to connect the tensor method given in Ron Maimon's nice answer with Young diagrams.
$SU(2)$
An irrep of the Lie group$^1$
$$SU(2)~=~\{M\in{\rm Mat}_{2\times 2}(\mathbb{C})\mid M^{\dagger}\eta M=\eta\wedge\det M =1\}$$
is classified by a weight $n\in\mathbb{N}_0$ and
corresponds to a Young diagram with 1 row
$$\begin{align}
(n)~=~&\underbrace{\begin{matrix} [~~]& [~~]& \ldots & [~~] \end{matrix}}_{n \text{ boxes}}\cr
~\cong~&\underbrace{(1)\odot(1)\odot\ldots\odot(1)}_{n \text{ factors}}~=~(1)^{\odot n},\end{align} $$
or equivalently, a totally symmetric tensor
$$T^{\alpha_1\ldots\alpha_n},$$
where each index $\alpha_1,\ldots,\alpha_n\in\{1,2\}$
belongs to the fundamental/defining/spinor representation
$$ (1)~=~[~~]~=~{\bf 2} .$$
The integer $n=2j\in\mathbb{N}_0$ is twice the spin $j\in\frac{1}{2}\mathbb{N}_0$. The character is
$$ \chi_n(q)~=~\frac{q^n-q^{-n}}{q-q^{-1}}~=~\sum_{m=0}^nq^{2m-n}. $$
The dimension is
$$ \dim (n)~=~ \chi_n(q\!=\!1)~=~n+1~=~2j+1. $$
The fusion rule is the well-known addition rule for spin
$$\begin{align} (n)\otimes (m)
~\cong~& \underbrace{(n)\odot (m)}_{\cong (n+m)}~~\oplus~~(n-1)\otimes (m-1)\cr
~\cong~& \bigoplus_{a=0}^{\min(n,m)}(n+m-2a)
,\end{align} $$
where the integer $a$ counts how many indices we antisymmetrize. Recall that the 2D antisymmetric Levi-Civita tensor $\epsilon^{\alpha_1\alpha_2}$
$$ \begin{matrix} [~~] \cr [~~]\end{matrix}~\cong~\cdot $$
corresponds to the trivial representation (=no boxes), which also explains why Young diagrams only have a single row.
$SU(3)$
An irrep of the Lie group$^1$
$$SU(3)~=~\{M\in{\rm Mat}_{3\times 3}(\mathbb{C})\mid M^{\dagger}\eta M=\eta\wedge\det M =1\}$$
is classified by a weight $(n,\bar{n})\in\mathbb{N}_0^2$ and
corresponds to a Young diagram with 2 rows
$$
(n,\bar{n})~=~\underbrace{\begin{matrix} [~~]& [~~]& \ldots & [~~] \cr [~~]& [~~]& \ldots & [~~] \end{matrix}}_{\bar{n} \text{ boxes}} ~~\underbrace{\begin{matrix} [~~]& [~~]& \ldots & [~~] \cr & & & \end{matrix}}_{n \text{ boxes}} $$
or equivalently, a tensor$^2$
$$T^{\alpha_1\ldots\alpha_n}_{\bar{\alpha}_1\ldots\bar{\alpha}_{\bar{n}}},$$
that is
symmetric in upper unbarred indices
$\alpha_1,\ldots,\alpha_n\in\{1,2,3\}$
belonging to the fundamental/defining representation
$$ (1,0)~=~[~~]~=~{\bf 3}; $$
symmetric in lower barred indices
$\bar{\alpha}_1,\ldots,\bar{\alpha}_{\bar{n}}\in\{1,2,3\}$
belonging to the complex conjugate representation
$$ (0,1)~=~\begin{matrix} [~~] \cr [~~]\end{matrix}~\cong~\bar{\bf 3}; $$
and such that all traces between upper and lower indices are removed.
Here
$$\begin{align}(n,0)~\cong~&(1,0)^{\odot n}\qquad
\text{with}\qquad\dim (n,0)~=~\frac{(n+1)(n+2)}{2},\cr
(0,\bar{n})~\cong~&(0,1)^{\odot \bar{n}}\qquad\text{with}\qquad
\dim (0,\bar{n})~=~\frac{(\bar{n}+1)(\bar{n}+2)}{2}.
\end{align}$$
Removing a trace leads to a recursion relation
$$ (n,0)\otimes (0,\bar{n})~\cong~(n,\bar{n})~~\oplus~~(n-1,0)\otimes (0,\bar{n}-1), $$
from which we can deduce the dimension
$$ \dim (n,\bar{n})~=~\frac{(n+\bar{n}+2)(n+1)(\bar{n}+1)}{2}. $$
The fusion rule is
$$\begin{align} (n,\bar{n})&\otimes (m,\bar{m})\cr
~\cong~& \bigoplus_{k=0}^{\min(n,\bar{m})}\bigoplus_{\bar{k}=0}^{\min(\bar{n},m)} (n-k,m-\bar{k};~\bar{n}-\bar{k},\bar{m}-k)\cr
~\cong~& \bigoplus_{k=0}^{\min(n,\bar{m})}\bigoplus_{\bar{k}=0}^{\min(\bar{n},m)}\left\{\bigoplus_{a=0}^{\min(n-k,m-\bar{k})} (n+m-k-\bar{k}-2a,~\bar{n}+\bar{m}-k-\bar{k}+a)\right.\cr
~\oplus~& \left.\bigoplus_{\bar{a}=1}^{\min(\bar{n}-\bar{k},\bar{m}-k)}(n+m-k-\bar{k}+\bar{a},~\bar{n}+\bar{m}-k-\bar{k}-2\bar{a})\right\},
\end{align}$$
where the integer $k$ ($\bar{k}$) counts the number of cross index contractions between the $n$ & $\bar{m}$ ($\bar{n}$ & $m$) blocks, respectively. The integer $a$ ($\bar{a}$) counts the number of antisymmetrizations of pairs of upper (lower) indices between the $n$ & $m$ ($\bar{n}$ & $\bar{m}$) blocks, which via the 3D antisymmetric Levi-Civita tensor is equivalent to a lower (an upper) index, respectively.
The fusion rule has the form of a Wick-type theorem written schematically as
$$ (n,\bar{n})\otimes (m,\bar{m})~=~\bigoplus_{\text{allowed contractions}}:(\overline{\overline{n,\overline{\overline{\overline{\bar{n})\otimes (m}}},\bar{m}}}): $$
It is a sum of all allowed contractions of a normal-ordered expression
$$:(n,\bar{n})\otimes (m,\bar{m}): ~=~ (n+m,\bar{n}+\bar{m})~.$$
In particular the irrep
$$(n,\bar{n})~=~:(n,\bar{n}):$$
itself is already normal-ordered since all self-contractions (=traces) are zero by construction.
There is clearly an upper limits to how many contractions we can perform:
$$ k+a~\leq~ n, \qquad \bar{k}+\bar{a}~\leq~\bar{n},\qquad\bar{k}+a~\leq~m,\qquad k+\bar{a}\leq\bar{m}. $$
The resulting irrep is
$$(\ell,\bar{\ell})~=~(n+m-k-\bar{k}-2a+\bar{a},~\bar{n}+\bar{m}-k-\bar{k}+a-2\bar{a}).$$
The number of boxes becomes
$$\#(\Box)~=~\ell+2\bar{\ell}
~=~(n+2\bar{n})+(m+2\bar{m})-3(k+\bar{k}+\bar{a}).$$
Selection rule. Perhaps surprisingly, the integers $a$ and $\bar{a}$ in the fusion rule cannot simultaneously be non-zero, i.e. we cannot have both an upper and a lower antisymmetrization.
Tensor explanation: Given 2 tensors
$$T^{\alpha_1\ldots\alpha_n}_{\bar{\alpha}_1\ldots\bar{\alpha}_{\bar{n}}}\qquad\text{and}\qquad
S^{\beta_1\ldots\beta_m}_{\bar{\beta}_1\ldots\bar{\beta}_{\bar{m}}},$$
operationally we assume that we have removed all cross-traces before any antisymmetrizations. Say the result
$$ R^{\alpha_1\ldots\alpha_r\beta_1\ldots\beta_s}_{\bar{\alpha}_1\ldots\bar{\alpha}_{\bar{r}}\bar{\beta}_1\ldots\bar{\beta}_{\bar{s}}}$$
has no cross-traces. Then an upper and lower antisymmetrization with 2 $\epsilon$-tensors
$$ R^{\alpha\alpha_2\ldots\alpha_r\beta\beta_2\ldots\beta_s}_{\bar{\alpha}\bar{\alpha}_2\ldots\bar{\alpha}_{\bar{r}}\bar{\beta}\bar{\beta}_2\ldots\bar{\beta}_{\bar{s}}}
\epsilon_{\alpha\beta\gamma}\epsilon^{\bar{\alpha}\bar{\beta}\bar{\gamma}}
~=~ R^{\alpha\alpha_2\ldots\alpha_r\beta\beta_2\ldots\beta_s}_{\bar{\alpha}\bar{\alpha}_2\ldots\bar{\alpha}_{\bar{r}}\bar{\beta}\bar{\beta}_2\ldots\bar{\beta}_{\bar{s}}}
\begin{vmatrix}\color{green}{\delta^{\bar{\alpha}}_{\alpha}}&\color{red}{\delta^{\bar{\alpha}}_{\beta}}&\delta^{\bar{\alpha}}_{\gamma}\cr
\color{red}{\delta^{\bar{\beta}}_{\alpha}}&\color{green}{\delta^{\bar{\beta}}_{\beta}}&\delta^{\bar{\beta}}_{\gamma}\cr
\delta^{\bar{\gamma}}_{\alpha}&\delta^{\bar{\gamma}}_{\beta}&\delta^{\bar{\gamma}}_{\gamma}\end{vmatrix}~=~0
$$
is zero. Note that each of the 6 terms in the above determinant must contain either a $\color{green}{\text{green}}$ or a $\color{red}{\text{red}}$ Kronecker delta. A $\color{green}{\text{green}}$ term vanishes because the tensors $T$ & $S$ are born traceless. A $\color{red}{\text{red}}$ term vanishes because $R$ has no cross-traces. $\Box$
Young tableau explanation: A resulting Young tableau $(\ell,\bar{\ell})$ is of the form [2]
$$\begin{matrix} [\leftarrow\bar{n}\rightarrow]&[\leftarrow n\rightarrow]&[\leftarrow a_1\rightarrow]&[\leftarrow b_1\rightarrow]\cr
[\leftarrow\bar{n}\rightarrow]&[\leftarrow a_2\rightarrow]&[\leftarrow b_2\rightarrow]\cr [\leftarrow a_3\rightarrow]&[\leftarrow b_3\rightarrow]\end{matrix}$$
(not necessarily aligned), where
$$ a_1+a_2+a_3~=~m+\bar{m},\qquad b_1+b_2+b_3~=~\bar{m}. $$
Here $a_1$ denotes the number $a$'s in the 1st row, and so forth.
The Littlewood-Richardson rules are [2]
No same letter in the same column.
When reading the extension in arabic order, one must demand that the number of $a$'s $\geq$ the number of $b$'s $\geq$ the number of $c$'s$\geq\ldots $ at any point while reading.
The 1st rule implies
$$\begin{align} a_2~\leq~& n,\cr
a_3~\leq~&\bar{n},\cr
a_3+b_3~\leq~&\bar{n}+a_2.
\end{align} $$
The 2nd rule implies
$$\begin{align} b_1~=~&0,\cr
b_2~\leq~&a_1
\quad\Leftrightarrow\quad
a_2+a_3~\leq~m+b_3,\cr
b_3~\leq~b_2+b_3~=~\bar{m}~\leq~& a_1+a_2
\quad\Leftrightarrow\quad
a_3~\leq~m.\end{align} $$
One may check that this already implies weakly decreasing rowlengths of the resulting Young tableau $(\ell,\bar{\ell})$:
$$ a_2+b_2~\leq~n+a_1, \qquad a_3+b_3~\leq~\bar{n}+a_2+b_2. $$
We choose 3 independent variables: $a_2$, $a_3$ & $b_3$. We identify the number $\bar{k}=a_3\leq\min(m,\bar{n})$ of $(m,\bar{n})$ contractions.
Case $b_3\leq a_2:$ We identify the number $a=a_2-b_3\geq 0$ of $(n,m)$ antisymmetrizations; the number $\bar{a}=0$ of $(\bar{n},\bar{m})$ antisymmetrizations; and the number $k=b_3\leq\min(n,\bar{m})$ of $(n,\bar{m})$ contractions.
Case $a_2\leq b_3:$ We identify the number $a=0$ of $(n,m)$ antisymmetrizations; the number $\bar{a}=b_3-a_2\geq 0$ of $(\bar{n},\bar{m})$ antisymmetrizations; and the number $k=a_2\leq\min(n,\bar{m})$ of $(n,\bar{m})$ contractions.
It is straightforward to check that these identifications fit like a glove with the pertinent inequalities. $\Box$
References:
S. Coleman, Fun with $SU(3)$, 1965; chapter 1.
H. Georgi, Lie Algebras in Particle Physics, 2nd edition, 1999; sections 12.2 + 13.2.
A. Zee, Group Theory in a Nutshell for Physicists, 2016; section V.2.
$^1$ We pick for simplicity the metric tensor $\eta$ equal to the Kronecker delta $\delta$.
$^2$ We have artificially lowered the bar indices. This is so that we can use a simplified calculus where we don't have to use a metric tensor $\eta$ when contracting unbarred and barred indices, and/or when using the Levi-Civita tensor. We leave it to the reader to properly restore the role of the metric tensor $\eta$. The main results will not change.