Nota: Aunque las respuestas anteriores están organizadas en orden lexicográfico, puede elegir el orden en el que se emiten las respuestas.
Dos, ejemplo de algoritmo
Ideas
La idea para resolver este problema es relativamente simple. Cada número en una cadena tiene varias letras, por ejemplo, 2 corresponde a: 3 abc, 3 corresponde a 3 def, 4 corresponde a 3 ghi, luego 234 corresponde a 3 * 3 * 3 La combinación de relojes, reducida al código, es un bucle for de tres capas. En otras palabras, digits.count determina cuántos niveles de bucles for, luego se anidan los N niveles correspondientes de bucles for, y es mejor utilizar métodos recursivos.
La construcción de la función recursiva todavía se basa en la idea del bucle for, la diferencia es el mecanismo de salida de la función recursiva, la combinación de las letras correspondientes y las condiciones de recolección y el procesamiento del índice del subbucle.
let matchTable:[Int:[String]]=[2:["a","b","c"],3:["d","e","f"],4:["g","h","i"],5:["j","k","l"],6:["m","n","o"],7:["p","q","r","s"],8:["t","u","v"],9:["w","x","y","z"]]funcletterCombinations(_ digits:String)->[String]{
if digits ==""{
// 避免map的时候返回 [""]return[]}// Set中任何元素只出现一次var ret:Set<String>=[]var i =0while i <5000{
var str =""for c in digits {
let val =Int(String(c))!// 取随机内容
str += matchTable[val]!.randomElement()!}
ret.insert(str)
i +=1}return ret.map{
(str)->Stringinreturn str
}}