• 求n个数的排列


    如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。

    public class Test6 {

    //设置总数
    private static int count =0;
    public static void main(String[] args) {

    //获取
    Scanner s = new Scanner(System.in);
    int n = s.nextInt();
    Vector<Character> sources = new Vector<Character>();
    Vector<Character> results = new Vector<Character>();
    //将获取的数据放入栈
    for (int i = 0; i <n; i++) {
    sources.add((char) ('A'+i));
    }
    //调用自定义方法,计算总数和输出结果
    count(sources, results);

    //输出符合排列的总数
    System.out.println(count);
    }
    public static void count(Vector<Character> v1,Vector<Character> v2){

    //如果v1的长度为0就输出结果因为数据已经全部取出
    if(v1.size()==0){
    for (int i = 0; i < v2.size(); i++) {
    System.out.print(v2.elementAt(i));
    }
    System.out.print(" ");
    count++;
    return;
    }
    for (int i = 0; i < v1.size(); i++) {
    //设置两个缓存栈,用于回调函数是作为参数
    Vector<Character>tsourse=new Vector<Character>(v1);
    Vector<Character>tresult=new Vector<Character>(v2);
    //将剩余的数依次添加进矢量中
    tresult.add(v1.elementAt(i));

    //并移除队列中的当前元素
    tsourse.remove(i);

    //回调函数
    count(tsourse, tresult);
    }
    }
    }

    注:主要考察的是递归

    如果需要输出的是含重复的数据是可以改为

    public static void count(Vector<Character> v1,Vector<Character> v2){
    if(v2.size()==v1.size()){
    for (int i = 0; i < v2.size(); i++) {
    System.out.print(v2.elementAt(i));
    }
    System.out.print(" ");
    count++;
    return;
    }
     for (int i = 0; i < v1.size(); i++) {
    //设置两个缓存栈
    Vector<Character>tsourse=new Vector<Character>(v1);
    Vector<Character>tresult=new Vector<Character>(v2);
    //当
    System.out.println(i);
    tresult.add(v1.elementAt(i));
    //tsourse.remove(i);
    count(tsourse, tresult);
    }
    }

  • 相关阅读:
    「JSOI2019」节日庆典
    「CTSC2017」网络
    数学杂谈 #6
    「WTF」铁锅乱炖比赛篇
    「LOJ6538」烷基计数 加强版 加强版
    「ZJOI2015」地震后的幻想乡
    「ZJOI2010」贪吃的老鼠
    「CF1290F」Making Shapes
    「WTF」铁锅乱炖算法篇
    「AGC031E」Snuke the Phantom Thief
  • 原文地址:https://www.cnblogs.com/plas/p/9893350.html
Copyright © 2020-2023  润新知