排列组合数列的java实现

    技术2022-05-20  39

    /**   * @author hwy1782@gmail.com   * @creation date 2010-7-7 下午10:06:24   *  *   * 对于一个序列r={4,3,5…}求全排列?         递归解法的思路:  (1)对于一个序列R={4,3,5…},     它其中的每一个数设为Ri,它的全排列我们设为perm(R).  (2)对于R的全排列我们可以转化成几个小的问题:         4开头,{3,5…}的全排列,         3开头,{4,5…}的全排列,         5开头,{4,3…}的全排列         即     Perm(R)= {R1Perm(R-R1) , R2Perm(R-R2) , R3Perm(R-R3)......,RnPerm(R-Rn)}     其核心思想就是:将每个元素放到n个元素组成的队列最前方,     然后对剩余元素进行全排列,依次递归下去。            比如:     a b c     首先将a放到最前方(跟第一个元素交换),然后排列b c,然后将a放回本         来位置,结果 a b c; a c b     其次将b放到最前方(跟第一个元素交换),然后排列a c,然后将b放回     结果 b a c; b c a  *   */    public class ComputePermutation {            public static void main(String[] args) {          String str = "abc";          char[] array = str.toCharArray();          Perm(array, 0, array.length-1);  //      System.out.println(array.length);      }        public static void Perm(char[] array, int start, int end) {          if(start == end){              for(int i = 0; i <= end; i++)                  System.out.print(array[i]+" ");              System.out.println();          }else{              for(int i = start; i <= end ; i++){                  exchange(array, start, i);                  Perm(array, start+1, end);                  exchange(array, start, i);  //恢复数列为原数列,便于选择下一个首字符。            }          }      }            public static void exchange(char[] array, int start, int i){          char temp = array[start];          array[start] = array[i];          array[i] = temp;      }  }  


    最新回复(0)