剑指offer38:字符串的排列

(一)题目描述

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

(二)思路分析

       a.求所有可能出现在第一个位置的字符,第二步是固定第一个字符,求后面所有字符的排列
       b.拿第一个字符与它之后的字符逐个交换,典型的递归思路

(三)代码

class Solution {
public:
    vector Permutation(string str) {
        //判断输入
        if(str.length() == 0)
        {
            return result;
        }
        perm(str, 0);
        //对结果进行排序
        sort(result.begin(), result.end());
        return result;
    }
private:
    void perm(string str, int begin)
    {
        //递归条件:第一位和最后一位交换完成
        if(begin == str.length())
        {
            result.push_back(str);
            return;
        }
        for(int i=begin; i result;
};

实现

你可能感兴趣的:(剑指offer刷题)