zoukankan      html  css  js  c++  java
  • 【递归】全排列

    Description

     输入一个数字n,输出从1~n组成的数字的全排列,每个排列占一行,输出按照数值升序排列

    比如输入2,则输出是:

    12

    21

    又如输入3,则输出是:

    123

    132

    213

    231

    312

    321

    Input

     第一行是一个整数m,代表有m个测试用例

    接下来的m行,每行是一个整数n,0 < n < 10

    Output

     对于每个用例,输出它的全排列,每个排列占一行,输出按照数值升序排列

    Sample Input
     Copy sample input to clipboard
    2
    2
    3
    
    Sample Output
    12
    21
    123
    132
    213
    231
    312
    321
    

    Problem Source: 第四周 5班

     

    解题思路:

    QAQ之前因为最后几个不能顺序输出,老是乱位置,看了好几个博客都没大懂,直到我看到一个用字符串处理的。。。简直好用!!!!又好懂!!!!!233333

    参考博客http://blog.csdn.net/jokers_i/article/details/8217063

    实现代码:

    #include<iostream>
    #include<string>
    using namespace std;
    
    void fun(const string& sf, const string& sr) {//sf表示前部分,sr表示后部分 
        if (sr.size() == 1) {
            cout << sf << sr << endl;
        } else {
            for (int i = 0; i < sr.size(); i++)
                fun(sf+sr[i], string(sr).erase(i, 1));
        }
    }
    
    int main() {
        int m, n, i;
        string sr;
        cin >> m;
        while (m--) {   //m个测例 
            cin >> n;
            for (i = 0; i < n; i++)
                sr += i  + '1';    //转换成一个字符串的全排列 
            fun("", sr);
            sr="";
        }
    }            
  • 相关阅读:
    推荐随笔
    搭建http服务
    python之numpy和pandas
    eclipse项目打包
    keras安装
    eclipse设置快速提示符
    linux常用命令
    Webpack3 从入门到放弃
    【ES6】Generator+Promise异步编程
    【Vue】删除数组元素,导致剩余元素被重新渲染
  • 原文地址:https://www.cnblogs.com/zengyh-1900/p/4064948.html
Copyright © 2011-2022 走看看