zoukankan      html  css  js  c++  java
  • java实现全排列问题

    1.问题描述:

        一组字符串的全排列,按照全排列的顺序输出,并且每行结尾无空格。

    2.输入:

        输入一个字符串

    3.输入示例:

        请输入全排列的字符串:
        abc

    4.输出示例:

        a b c
        a c b
        b a c
        b c a
        c b a
        c a b

    5.解题思路:

        全排列问题在算法这类问题中属于典型的递归与回溯类问题。这种题目一定要从整体去思考。通过输入示例,我们可以观察到,a,b,c三个字符,都可以放在第一个位置,都可以放在第二个位置,都可以放在第三个位置...根据这个思路,通过我们数学中的全排列公式,有三个位置□□□,第一个位置可以选3个,第二个位置选2个,第三个位置只能选一个。C(1,3)*C(1,2)*C(1,1) (表示不出来...就是数学里面的组合公式)。如果是求组合的个数,则直接利用这个公式相乘,如果打印排列,则如下进行交换,直接在边界条件打印即可,求代码如下:


    import java.util.Scanner;

    public class PaiLie {
        public static void main(String[] args) {
            Scanner scn = new Scanner(System.in);
            System.out.println("请输入全排列的字符串:");
            String s= scn.next();
            char[] shu = s.toCharArray();
            //从第0个位置开始
            pailie(shu,0);
        }
        public static void pailie(char shu[], int k){
            if(k==shu.length){
                for(int i=0;i<shu.length;i++){
                    System.out.print(shu[i] + " ");
                }
                System.out.println();
            }
            for(int i=k;i<shu.length;i++){
                //交换
                {char t = shu[k];shu[k] = shu[i];shu[i] = t;}
                //递归,下一个数去排列
                pailie(shu,k+1);
                //交换回来
                {char t = shu[k];shu[k] = shu[i];shu[i] = t;}
            }
        }
    }

  • 相关阅读:
    【转】JSch
    【转】JSch
    【转】class卸载、热替换和Tomcat的热部署的分析
    关于Tomcat自动加载更新class的小技巧
    MySQL中order by中关于NULL值的排序问题
    MySQL触发器使用详解
    QuartZ Cron表达式
    JDBC的URL设置allowMultiQueries的原因
    CRT:C运行库简介
    IntelliJ IDEA安装AngularJS插件
  • 原文地址:https://www.cnblogs.com/zzlback/p/8460812.html
Copyright © 2011-2022 走看看