zoukankan      html  css  js  c++  java
  • 字符串的排列

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

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

    【思路】如上图所示,树状图的第一层其实质就是下一个递归子问题入口str的值,也就是0与j(0,1,2…str.length())

    交换后str的值,并且每次进入递归函数时,在i  之前字母将会被固定,其后面的数进行全排列(交换元素的位置)。然后一直递归下去,从而得到最后的全排列!一般我们写递归函数如果需要动态保存数据,如vector res, 我们可以把它当作一个参数,并使用引用传递的形式来修改res这个变量!

    递归的结束条件为,索引i等于了str.length()时,递归结束!

    class Solution {
    public:
        void process(vector<string>& res, string str, int i){
            if(i == str.length()){
                res.push_back(str);
            }
            set<char> ss;
            for(int j = i;j < str.length(); j++){
                if(ss.find(str[j]) == ss.end()){
                    ss.insert(str[j]);
                    swap(str[i], str[j]);
                    process(res, str, i+1);
                }
            }
        }
    
        vector<string> Permutation(string str) {
            vector<string> res;
            if(str.length() == 0) return res;
    
            process(res, str, 0);
            return res;
        }
    };
  • 相关阅读:
    jdk8 xp
    electron react
    electron install失败
    0511 Braft Editor和嵌套路由
    组播
    0427
    duilib自定义组件
    android 读写文件、列出根目录文件及新版本权限
    android Fragment使用RecyclerView
    Duilib 带xml的1
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11349730.html
Copyright © 2011-2022 走看看