zoukankan      html  css  js  c++  java
  • careercup-递归和动态规划 9.5

    9.5 编写一个方法,确定某字符串的所有排列组合。

    类似leetcode:Permutations

    解法:

    跟许多递归问题一样,简单构造法非常管用。假设有个字符串S,以字符序列a1a2a...an表示。

    终止条件:n=1

    S=a1,只有一种排列组合,即字符串a1

    情况:n=2

    S=a1a2 有两种排列组合a1a2和a2a1

    情况:n

    对于一般情况下,我们只需重复这个步骤。即已经求得f(n-1)的解,接着只要将an插入到这些字符串的任意位置。

    c++代码实现:

    #include<iostream>
    #include<vector>
    #include<string>
    using namespace std;
    
    vector<string> getPerms(string str)
    {
        if(str.empty())
            return vector<string>();
        int n=str.length();
        vector<string> res;
        res.push_back(string(""));
        vector<string> r;
        int i,j;
        for(i=0;i<n;i++)
        {
            char c=str[i];
            r=res;
            res.clear();
            for(j=0;j<r.size();j++)
            {
               string tmp=r[j];
               int index=0;
               while(tmp.begin()+index!=tmp.end())
               {
                   tmp.insert(tmp.begin()+index,c);
                   res.push_back(tmp);
                   tmp=r[j];
                   index++;
               }
               tmp.push_back(c);
               res.push_back(tmp);
            }
        }
        return res;
    }
    
    int main()
    {
        string str="abc";
        vector<string> res=getPerms(str);
        for(auto s:res)
            cout<<s<<endl;
    }
  • 相关阅读:
    js对象方法
    重要的小知识点
    vs2017引用vue组件中文乱码
    单行文本溢出打点、多行文本溢出打点
    span和input布局时对不齐
    在思科三层交换机上配置DHCP,不同网段/VLAN间互通
    搭建ssm整合
    使用Redis
    MyBatis常用实现方式
    Java 面向对象
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4150168.html
Copyright © 2011-2022 走看看