zoukankan      html  css  js  c++  java
  • 剑指offer26-字符串的排列

    输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。(输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。)
    思路:

    字符串长度为n,

    第二行,固定第一位,第一位元素与n位元素交换。有n个可能;

    第三行,固定前两位,第二位元素与n-1位元素交换,上一层每个节点在第三层有n-1个可能;

    ...

    第n行,固定前n-1位,第n-1位元素与两位元素交换。

         void swap(string &str,int i,int j)
            {
                char c;
                c=str[i];
                str[i]=str[j];
                str[j]=c;
            }
        vector<string> Permutation(string str) {
            vector<string> res;
            int begin=0;
            Permutation(str,begin,res);
            return res;
        }
        void Permutation(string str,int begin,vector<string>& res)
        {
            if(begin==str.size()-1)
            {
                res.push_back(str);
            }
            else{
                 for(int i=begin;i<str.size();i++)
                 {
                     if(begin!=i&&str[begin]==str[i])
                     {
                         continue;//重复元素跳过
                     }   
                     swap(str,begin,i);
                     Permutation(str,begin+1,res);       
                 }
            }
        }
  • 相关阅读:
    CloudFlare防护下的破绽:寻找真实IP的几条途径
    用Log Parser Studio分析IIS日志
    Log Parser 2.2 + Log Parser Lizard GUI 分析IIS日志示例
    wordPress Development
    MyISAM 与 InnoDB 的区别
    ubuntu安装wiz笔记
    chown命令
    (转载)我们工作到底为了什么
    DS_Store 是什么文件
    Linux命令 ,在当前目录下查找一个,或者多个文件
  • 原文地址:https://www.cnblogs.com/trouble-easy/p/12969750.html
Copyright © 2011-2022 走看看