对于string类型,用push_back和直接用 + 连接字符有什么区别?
我在leetcode上面做了一道题,但是对于string类型,用push_back连接字符不能通过测试,但是改为加号来连接字符,可以过了。
题目链接
我的两份代码:
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
string part = "";
__generateParenthesis(res, part, n, n);
return res;
}
void __generateParenthesis(vector<string> &res, string part, int left, int right) {
if (left == 0 && right == 0) {
res.push_back(part);
return ;
}
if (left > 0) {
part.push_back('(');
__generateParenthesis(res, part, left - 1, right);
}
if (right > 0 && left < right) {
part.push_back(')');
__generateParenthesis(res, part, left, right - 1);
}
}
};
上面的是过不了的,但是下面的过得了:
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
string part = "";
__generateParenthesis(res, part, n, n);
return res;
}
void __generateParenthesis(vector<string> &res, string part, int left, int right) {
if (left == 0 && right == 0) {
res.push_back(part);
return ;
}
if (left > 0) {
// part.push_back('(');
__generateParenthesis(res, part + '(', left - 1, right);
}
if (right > 0 && left < right) {
// part.push_back(')');
__generateParenthesis(res, part + ')', left, right - 1);
}
}
};
不是很明白,希望前辈们可以指导下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你在用
operator+
的時候, 是按值傳入的, 沒有改變part
. 而push_back()
時, 改變了part
, 在第三個if
時part
的值與你預期就不符了, 你把第二個例子都改成string temp = part; temp.push_back(...); __generateP...(..., temp, ...);
應該也能AC了.PS: 自己寫代碼時, 別用雙下劃線開頭, 不知道你是從那裏學來的這個習慣, 在c++中必須摒棄, 因爲這些都是保留字, 是留給標準庫用的, 你一旦起了這樣的名, 就是UB了. 所以窩看py時, 總是非常不爽...