题目描述-括号生成
https://leetcode-cn.com/problems/generate-parentheses/comments/
递归
永远的暴力解法
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> vec;
//n为0时,直接输出
if(n==0)
{
string s;
vec.push_back(s);
return vec;
}
//前面i对括号,后面在()里面放n-i-1个括号,不会重复
for(int i=0; i<n; i++)
{
//i为0时,vector长度为1
vector<string> vfront = generateParenthesis(i);
vector<string> vback = generateParenthesis(n-i-1);
for(int k=0; k<vfront.size(); k++)
{
for(int l=0; l<vback.size(); l++)
{
string pair = "()";
string sfront = vfront[k];
string sback = vback.at(l);
pair.insert(1, sback);//把sbck放进括号里
sfront.append(pair);//连接sfront 和 pair
vec.push_back(sfront);
}
}
}
return vec;
}
};
题目描述-电话号码的字母组合
https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
DFS
class Solution {
public:
//自定义函数和给定函数公用的参数
vector<string> vec;
//注意map的定义方法
map<char,string> pairs={{'2',"abc"},{'3',"def"},{'4',"ghi"},{'5',"jkl"},{'6',"mno"},{'7',"pqrs"},{'8',"tuv"},{'9',"wxyz"}};
vector<string> letterCombinations(string digits) {
if(digits.length()==0)
return vec;
int i =0;
generate("", i, digits);
return vec;
}
//DFS
void generate(string s, int i, string digits)
{
if(digits[i]=='\0')
{
vec.push_back(s);
return;
}
string tmp = pairs[digits[i]];//从map中读取值用[]
for(char w : tmp)//遍历字符串中的字符
generate(s+w, i+1, digits);//在string后面增加字符可以用“+”
//i++;
}
};