对于string类型,用push_back和直接用 + 连接字符有什么区别?

发布于 2022-09-06 23:46:38 字数 1771 浏览 40 评论 0

我在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

带上头具痛哭 2022-09-13 23:46:38

你在用operator+的時候, 是按值傳入的, 沒有改變part. 而push_back()時, 改變了part, 在第三個ifpart的值與你預期就不符了, 你把第二個例子都改成string temp = part; temp.push_back(...); __generateP...(..., temp, ...);應該也能AC了.

PS: 自己寫代碼時, 別用雙下劃線開頭, 不知道你是從那裏學來的這個習慣, 在c++中必須摒棄, 因爲這些都是保留字, 是留給標準庫用的, 你一旦起了這樣的名, 就是UB了. 所以窩看py時, 總是非常不爽...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文