本人在刷leetcode 22题的时候遇到了这样一个问题
string s;
s+="("和s+'('理论上一个是一样的,似乎是+运算符进行了重载,char类型数据被转化为了string 数据,但在实际运行的时候却出现了问题。
在深度优先搜索算法进行递归时,s+="("一直多一个左括号。
在第一次递归结束后,leftnum是1,s是((,但采用s+="(",s(((,一直多一个左括号。
vector<string> generateParenthesis(int n)
{
vector<string > st;
string s;
ges(n,n,st,s);
return st;
}
void ges(int leftnum,int rightnum,vector<string>&st,string s)
{
if(leftnum==0&&rightnum==0)
st.push_back (s);
if(leftnum>0)
ges(leftnum-1,rightnum,st,s+'(');
if(rightnum>0&&leftnum<rightnum)
ges(leftnum,rightnum-1,st,s+')');
}
如果是s+'('程序没有问题,可是如果改成s+="("结果就出错了。
这是s+'('的结果:"((()))","(()())","(())()","()(())","()()()"
这是s+="("的结果:"((()))","((()())","((()()()","(()(())","(()(()()"
可以看到字符串相加的模式下一直多一个(。
萌新想知道,这是为啥呀?