• 手写字符串的全排列


    题目描述如下:

    当输入一个字符串时,输出一个字符串的全排列,例如输入,abc,
    输出如下:

    解决主要思想

    使用dfs,当保存的目的字符串达到排列字符串最终的长度时,这时需要,把这个字符串保存下来,
    然后当前递归结束,递归返回时,在字符串中之前 加入的最后一个字符需要删除掉,然后再返回其他字符串,
    为了防止,重复访问,每次访问后的字符,需要设置访问的flag,

    源程序如下

    
    #include<iostream>
    #include<string>
    #include<vector>
    #include<cstdlib>
    #include<cstring>
    #include<set>
    using namespace std;
    
    
    void dfs(set < string > &res, const string & src, string & dst, int *flags,
    	 int dstLen);
    
    vector < string > Permutation(string str)
    {
        if (str.empty()) {
    	vector < string > res;
    	return res;
        }
        // int flags[10];
        int *flags = new int[str.size()];
        set < string > strSet;
        for (int i = 0; i < str.size(); i++) {
    	string s;
    	memset(flags, 0, sizeof(sizeof(int) * str.size()));
    	s.push_back(str[i]);
    	flags[i] = 1;
    	dfs(strSet, str, s, flags, str.size());
        }
        vector < string > res(strSet.begin(), strSet.end());
        delete[]flags;
        return res;
    }
    
    
    
    void dfs(set < string > &res, const string & src, string & dst, int *flags,
    	 int dstLen)
    {
        if (dst.size() == dstLen) {
    	res.insert(dst);
    	return;
        }
    
        for (int i = 0; i < src.size(); i++) {
    	if (!flags[i]) {
    	    flags[i] = 1;
    	    dst.push_back(src[i]);
    	    dfs(res, src, dst, flags, dstLen);
    	    dst.pop_back();
    	    flags[i] = 0;
    	}
    
        }
    }
    
    void testPermutation()
    {
    
        string s("abc");
        vector < string > res;
        res = Permutation(s);
        for (int i = 0; i < res.size(); i++) {
    	cout << res[i] << " " << endl;
        }
    }
    
    
    
    int main()
    {
        testPermutation();
        return 0;
    }
    
    
  • 相关阅读:
    Axis2 1.7.4构建项目
    MyBatis之传入参数
    eclipse快捷键
    WEB-INF目录下的jsp页面如何访问?
    web-content和web-info目录问题
    http响应报文和http请求报文 详细信息
    极光推送知识点2
    极光推送别名、标签怎么理解
    推送的通知和自定义消息区别
    个推
  • 原文地址:https://www.cnblogs.com/wanshuafe/p/11689324.html
Copyright © 2020-2023  润新知