题解 | #NC-121 字符串的全排列#

字符串的排列

http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7

class Solution {
public:
    
    void func(vector<string>& res, string& str, int begin){
        if(begin == str.size()-1){
            if(find(res.begin(), res.end(), str) == res.end()){  // 避免“aa”的重复出现
                res.push_back(str);
//                 cout << str << endl;
            } //  结果去重
                
            return;
        }
        // 当begin为 i 时,遍历数组使每个元素放在第 i 个位置一次,得到此时他们的子串的全排列
        // 直到begin为len-1时,此时每个元素都已经在数组的每个位置出现了一次,所以得到最后一个全排列
        
//         for(int i = 0; i < str.size(); i++) // i 不需要从0开始
        for(int i = begin; i < str.size(); i++){ // i 从begin开始就不会有重复全排列出现
            swap(str[i], str[begin]);
            func(res, str, begin+1); // 对子串进行相同操作
            swap(str[i], str[begin]); // 恢复原来的字符串,进行下一个元素的全排列
        }
    }
    vector<string> Permutation(string str) {
        vector<string> res;
        if(str.empty())
            return res;        
        func(res, str, 0);
        sort(res.begin(), res.end());
        return res;
    }
};

全部评论

相关推荐

昨天 11:15
中南大学 Java
好可爱的hr姐姐哈哈哈哈
黑皮白袜臭脚体育生:兄弟们貂蝉在一起,吕布开了
点赞 评论 收藏
分享
哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
05-19 15:21
已编辑
门头沟学院 Java
白火同学:你才沟通了200,说实话,北上广深杭这里面你连一座城市的互联网公司都没投满呢,更别说还有各种准一线二线城市了。等你沟通突破了三位数,还没结果再考虑转行的事吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务