摸森堡 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)
    
    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作