zoukankan      html  css  js  c++  java
  • [九度][何海涛] 字符串的排序

    题目描述:

    输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

    输入:

    每个测试案例包括1行。

    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

    输出:

    对应每组数据,按字典序输出所有排列。

    样例输入:
    abc
    BCA
    
    样例输出:
    abc
    acb
    bac
    bca
    cab
    cba
    ABC
    ACB
    BAC
    BCA
    CAB
    CBA

    这题先把字符串排序,当本次要使用某个字符时,如果它和前面一个字符相同则前面的字符被使用了,它才能使用,这样就避免了重复。另外cout这题要超时,所以用printf,所以递归开始前先开一个C字符串数组。
     1 #include <iostream>
     2 #include <string>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <algorithm>
     7 using namespace std;
     8 
     9 bool canUse[10];
    10 
    11 void dfs(int dep, int maxDep, string &s, char ans[])
    12 {
    13     if (dep == maxDep)
    14     {
    15         ans[dep] = '\0';
    16         printf("%s\n", ans);
    17         return;
    18     }
    19 
    20     for(int i = 0; i < maxDep; i++)
    21         if (canUse[i])
    22         {
    23             if (i != 0 && s[i] == s[i-1] && canUse[i-1])
    24                 continue;
    25 
    26             canUse[i] = false;
    27             ans[dep] = s[i];
    28             dfs(dep + 1, maxDep, s, ans);
    29             canUse[i] = true;
    30         }
    31 }
    32 
    33 int main()
    34 {
    35     string s;
    36     while(cin >> s)
    37     {
    38         sort(s.begin(), s.end());
    39         memset(canUse, true, sizeof(canUse));
    40         char *ans = new char[s.size() + 1];
    41         dfs(0, s.size(), s, ans);
    42         delete [] ans;
    43     }
    44 }


  • 相关阅读:
    shader之渐变长方体实现(threejs)
    shader之threejs应用
    shader之cesium应用
    pip install -- Failed building wheel for XXX
    pycharm -- 界面乱码
    Android Studio -- 优化速度
    django -- ImageField 上传图片修改头像
    AI -- 回溯法解决四皇后问题
    Android Studio -- 真机测试
    傻瓜函数式编程
  • 原文地址:https://www.cnblogs.com/chkkch/p/2780757.html
Copyright © 2011-2022 走看看