Um algoritmo é um método eficaz expresso como uma lista finita de instruções bem definidas para o cálculo de uma função . Um padrão de design é uma solução geral reutilizável para um problema comumente ocorrido no design de software .
Você tem uma função que precisa calcular (as combinações de letras de uma lista de letras), o que significa que você definitivamente precisa de um algoritmo. Depois de ter um algoritmo, você pode descobrir que pode implementá-lo usando uma solução reutilizável e, nesse caso, poderá usar um padrão de design. No entanto, você não pode aplicar uma solução reutilizável antes de saber como deve ser a solução. Portanto, resolva o problema primeiro.