zoukankan      html  css  js  c++  java
  • 全排列算法

    1、递归实现全排列

    基本思路:

    (1)、对于n个数的全排列,可以看成是其中1个数开始,另外(n-1)个数的全排列结尾的排列,如此循环,直至完成每一个数开始的全排列。

    (2)、对于第一步得出的排列,将第1位忽略,剩下字串s,s的第一位作为开始,剩下的数进行全排列,循环,直至完成每一个数开始的全排列。

     1 public class Permutation {
     2     
     3     //将字符数组第a个字符和第b个字符交换位置
     4     public static String swap(String str,int a,int b){
     5         char array[] = str.toCharArray();
     6         char temp = array[a];
     7         array[a] = array[b];
     8         array[b] = temp;
     9         
    10         str = new String(array);
    11         return str;
    12     }
    13     
    14     public static void perm(String str,int current,int length){ //第current个字符开始,每个字符与其后面的字符交换位置。
    15         if(current == length){
    16             System.out.println(str);
    17         }
    18         else{
    19             for(int i = current; i <= length; i++){   //从current开始是因为,要输出初始字符串
    20                 str = swap(str,current,i);               
    21                 perm(str,current+1,length);      //从current的下一个字符开始,str是第current个字符与第i个字符交换后的str,每个字符与其后面的字符交换位置
    22                 str = swap(str, current, i);
    23             }
    24         }
    25     }
    26         
    27     public static void main(String[] args) {
    28         String str = new String("123");
    29         perm(str,0,str.length()-1);
    30     }
    31 }
  • 相关阅读:
    Oracle数据库中truncate命令和delete命令的区别
    数组中只出现一次的数字
    数对之差的最大值
    SQL Server: Difference Between Locking, Blocking and Dead Locking
    字符串处理
    Phpcms_V9任意文件上传
    最初的梦想
    陪你走过漫长岁月
    基于MitM的RDP降级攻击
    CVE-2017-0358
  • 原文地址:https://www.cnblogs.com/eleven24/p/4236259.html
Copyright © 2011-2022 走看看