Preámbulo
El recorrido recursivo profundo de C++ resuelve el problema de la "combinación de letras de números de teléfono". Esta pregunta examina de manera más exhaustiva. Examina el uso del vector, el recorrido profundo y la competencia recursiva . Espero que pueda ser útil para la gente de hierro.
1. Tema
Enlace: https://leetcode.cn/problems/letter-combinations-of-a-phone-number/
En segundo lugar, la solución
Como se muestra en la figura anterior, tomando "256" como ejemplo, ampliamos la disposición y combinación de los caracteres de las tres cadenas y encontramos que esta estructura es similar a la estructura de un árbol de múltiples bifurcaciones, principalmente para examinar la recorrido de profundidad, por lo que también podemos usar la recursividad para Finalizar.
Ahora que hemos determinado que se puede usar la recursión, necesitamos determinar los parámetros requeridos para la recursión.
Primero, necesitamos crear un vector<string> ret para almacenar las combinaciones de letras que deben devolverse . Al mismo tiempo, necesitamos crear una profundidad size_t para controlar la profundidad de la recursión , y luego crear una combinación de cadenas para almacenar las combinaciones de letras de cada grupo . Por supuesto, también se deben pasar dígitos. de.
Se han determinado los parámetros requeridos, entonces, ¿qué pasa con el proceso recursivo específico?
Tomemos la imagen de arriba "ajm" "ajn" "ajo" como ejemplo para explicar el proceso recursivo en detalle
Tres, el código
Código:
class Solution {
//获取每个数字对应字符串
//由于0 1没字符,所以设置成空串
string get_numberstr[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public:
void Combination(const string& digits,size_t depth,string combinestr, vector<string>& ret)
{
//depth控制深度,digits的长度就是我们递归的深度
if(depth==digits.size())
{
ret.push_back(combinestr);
return;
}
int digit=digits[depth]-'0';//获取数字字符
string numberstr=get_numberstr[digit];//获取数字所对应的字符串
for(auto ch:numberstr)
{
Combination(digits,depth+1,combinestr+ch,ret);
}
}
vector<string> letterCombinations(string digits) {
vector<string> ret;
if(digits.size()==0)
{
return ret;
}
size_t depth=0;//控制递归深度
string combinestr;//存储每组字符串
Combination(digits,depth,combinestr,ret);
return ret;
}
};
logrado con éxito