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

    题目描述如下:

    当输入一个字符串时,输出一个字符串的全排列,例如输入,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;
    }
    
    
  • 相关阅读:
    docker 安装 mysql5.7
    docker 安装 redis
    docker 安装 gitlab
    docker 升级到新版本
    logstash 采集springboot 错误日志配置
    图片左下角添加水印
    frida动态修改
    反反frida调试
    IDA插件KeyPatch直接在IDA中修改arm指令
    frida调用制作dex(用于有些对象读取不了)
  • 原文地址:https://www.cnblogs.com/wanshuafe/p/11689324.html
Copyright © 2011-2022 走看看