剑指offer 字符串的排列

剑指offer 字符串的排列

  • 题目描述
  • 题目类别
  • 解题思路
    • 具体实现

题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba

题目类别

字符串

解题思路

代码完整性:代码判空
分治法,把问题分解成固定第一个字符,排列剩下字符的方法,递归求解
注意:字典序打印;可能存在重复字符串
时间复杂度;n!

具体实现

class Solution {
public:
    vector<string> res;
    vector<string> Permutation(string str) {
        if(str.size() == 0 ) return res;
        Permutation(str,0);
        sort(res.begin(),res.end());
        return res;
    }
    void Permutation(string str, int index){
        if(index == str.size()-1){
            if(find(res.begin(),res.end(),str) == res.end()){
                 res.push_back(str);
            }
            return;
        }
        for(int i = index ; i < str.size(); i++){
            swap(str[index],str[i]);
            Permutation(str,index+1);
            swap(str[index],str[i]);

        }
    }
};

你可能感兴趣的:(c++算法)