嘉然在新加坡加班 2020-05-12 18:21 采纳率: 0%
浏览 172

求助!字符串相加和字符串加字符,效果不一样吗?

本人在刷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+="("的结果:"((()))","((()())","((()()()","(()(())","(()(()()"
可以看到字符串相加的模式下一直多一个(。
萌新想知道,这是为啥呀?

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-05-12 22:03
    关注
    如果执行完
    ges(leftnum-1,rightnum,st,s+'(');
    下面的if永远不成立,那么一样
    否则不一样,因为+=改变了s
    
    或者
     if(rightnum>0&&leftnum<rightnum)
     ->
     else  if(rightnum>0&&leftnum<rightnum)
    
    评论

报告相同问题?