Please enable Javascript to view the contents

剑指office(二十七)字符串的排列

 ·  ☕ 1 分钟  ·  🎅 YSL

题目描述

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

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

示例1

输入

"ab"

返回值

["ab","ba"]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    void PermutationCore(string str,int begin)
    {
        if(str.length()== begin)
        {
            result.push_back(str);
            return;
        }
        for(int i=begin;i<str.length();i++)
        {
            if(i!=begin&&str[i]==str[begin])
                continue;
            swap(str[begin], str[i]);
            PermutationCore(str,begin+1);
        }
        
    }
    vector<string> Permutation(string str) {
        if(str.length()==0)
            return result;
        PermutationCore(str,0);
        return result;
    }
private:
    vector<string> result;
};