zoukankan      html  css  js  c++  java
  • 生成一个序列所有排列的算法

    递归算法比较简单

    vector<string> p(string s)
    {
        vector<string> result;
        if(s.size() == 1)
        {
            result.push_back(s);
            return result;
        }
        for(int i=0;i<s.size();i++)
        {
            char c=s[i];
            string subs=s;
            subs.erase(i,1);
            vector<string> t=p(subs);
            for(int i=0;i<t.size();i++)
                result.push_back(t[i].append(1,c));
        }
        return result;
    }

    非递归算法就稍微复杂点,可惜面试的时候没有仔细检查这个实现。

    vector<string> p(string s)
    {
        vector<string> result;
        int n=s.size();
        char *buf=new char[n+1];
        buf[n]='\0';
        vector<bool> flags(n);
        vector<int> index(n);
        for(int i=0;i<n;i++)
        {
            flags[i]=false;
            index[i]=-1;
        }
        int i=0;
        while(i >= 0)
        {
            if(i == n)
            {
                string tmp(buf);
                result.push_back(tmp);
                i--;
            }
            else
            {
                int j;
                for(j=index[i]+1;j<n;j++)
                    if(flags[j] == false) break;
                if(index[i] >= 0)
                    flags[index[i]] =false;
                if(j < n)
                {
                    index[i]=j;
                    flags[index[i]]=true;
                    buf[i]=s[j];
                    i++;
                }
                else //backtrace to the previous location
                {
                    index[i] = -1;
                    i--;
                }
            }
        }
        delete []buf;
        return result;
    }
    说到底这个算法还是比较简单的,就是回溯的时候需要注意,必须将原来合法的位置重新标志为非法来释放占有的那个元素。

  • 相关阅读:
    spring mvc ajax请求
    spring mvc 返回页面数据
    spring mvc 参数传递的三种方式
    spring mvc 注解示例
    spring mvc handler的三种方式
    MyBatis 一级、二级缓存
    MyBatis 调用存储过程
    MyBatis动态SQL与模糊查询
    spring mvc 注解入门示例
    MyBatis 一对多关联查询
  • 原文地址:https://www.cnblogs.com/mathlover/p/2724189.html
Copyright © 2011-2022 走看看