排列组合的递归算法

import java.util.*;

public class PermutationAndCombination
{
 /**
 * author:54powerman@163.com
 * blog:http://blog.sina.com.cn/m/54powerman
 **/
 public static void main(String[] args)
 {
  long date1=System.currentTimeMillis();
  List list=count("01234567");//89abcdefghijklmnopqrstuvwxyz
  for(int i=0;i<list.size();i++)
  {
   System.out.println(list.get(i));
  }
  System.out.println("Process complete!Get "+list.size()+" strings and take ");
  System.out.print(System.currentTimeMillis()-date1+" ms");
 }
 public static List count(String strData)
 {
  List list = new ArrayList();
  if(strData.length()<2)
  {
   list.add(strData);
   return list;
  }
  else if(strData.length()==2)
  {
   String str1=strData.substring(0,1);
   String str2=strData.substring(1);
   list.add(strData);
   list.add(str2+str1);
  }
  else
  {
   for(int i=0;i<strData.length();i++)
   {
    String strTmp=strData.substring(i,i+1);
    List listTmp=count(strData.substring(0,i)+strData.substring(i+1,strData.length()));
    for(int j=0;j<listTmp.size();j++)
    {
     list.add(strTmp+listTmp.get(j).toString());
    }
   }
  }
  return list;
 }
};

写在这里不是因为这算法如何,而是,只是一道题目的解答——请用递归算法找出字符串中字符的排列组合。

时间: 2024-10-21 21:58:25

排列组合的递归算法的相关文章

【程序员眼中的统计学(5)】排列组合:排序、排位、排

排列组合:排序.排位.排 0 问题 回到顶部 1 基本计数法则 1  分类加法计数原则 定义:若具有性质A的事件有m个,具有性质B的事件有n个,则具有性质A或性质B的事件有m+n个. 例子:事件A:a点到b点乘火车有3条线路.        事件B:a点到b点乘汽车有2条线路.        则a点到b点共有(2+3)=5条不同线路 解释说明:完成一件事,有n类方法.在第1类办法中有m1种不同的方法,在第2类方法中有m2种不同的方法,--,在第n类方法中有mn 种不同的方法,则完成这件事的不同方

利用java算法排列组合父节点下的子节点

问题描述 利用java算法排列组合父节点下的子节点 一个item下有多个父节点,一个父节点下面有多个子节点,通过遍历父节点把每个父节点的子节点遍历出来,然后对子节点进行组合,求大神帮我补全代码 List parents = mrItemDimCombMybatisDao.getAllParentByItem(itemId); for (MrItemDim parent : parents) { List sons = mrItemDimCombMybatisDao.getAllSonByPare

求.NET的一个排列组合

问题描述 如1,2,3要求输出1,12,123,13,2,23,3所有组合,不考虑输出顺序不能有重复的数据. 解决方案 解决方案二:f(n)=2*f(n-1)+1解决方案三:引用1楼的回复: f(n)=2*f(n-1)+1 f(1)=1之后直接for都可以写出来了...解决方案四:从后第一个往前拼接,循环n-1遍,把结果保存到result.再从后第二个往前拼接,循环n-2遍,把结果合并到result.依次.....最后得到所有result.解决方案五:1,2,3,4,5第一遍:12345=>15

java-JAVA 生成 用0到9这十个数字 所有的排列组合(0不能再第一个)

问题描述 JAVA 生成 用0到9这十个数字 所有的排列组合(0不能再第一个) 用 0到9 生成 十位数的所有排列组合,数字0不能在第一个,这个生成的十位数, 不能有重复的数字. 解决方案 public static void main(String[] args) { String str[] = { "0", "1", "2", "3", "4", "5", "6"

C#非递归方式实现排列组合

C#以非递归方式实现三位排列组合,如下代码: //深度优先  class Program      {          static void Main(string[] args)          {              int[] number = new int[] { 1, 3, 5, 7 };              List data = new  List();              Stack openStack = new Stack();           

计算排列组合的php代码

前些天因为业务需要写了一段计算排列组合的代码,今天整理了一下,以备后用 <?php/** * 要解决的数学问题    :算出C(a,1) * C(b, 1) * ... * C(n, 1)的组合情况,其中C(n, 1)代表从n个元素里任意取一个元素 * * 要解决的实际问题样例:某年级有m个班级,每个班的人数不同,现在要从每个班里抽选一个人组成一个小组, *                       由该小组来代表该年级参加学校的某次活动,请给出所有可能的组合 */ /* ##########

浅析实现排列组合查询算法

所谓的排列组合查询就相当于GOOGLE高级查询中"包含以下全部的字词"查询,也就是说查询中必须包含所有查询关键词,而且他们的顺序可以是任意.以下程序段实现了这一功能.比如输入查询关键字:tom tina则最一般的情况是在程序中使用类似于"select sex from student where name like '%tom%tina%' or name like '%tina%tom%' ordered by age" 的查询语句实现以上的查询,因此如何得到'%

关于各种排列组合java算法实现方法

一.利用二进制状态法求排列组合,此种方法比较容易懂,但是运行效率不高,小数据排列组合可以使用 复制代码 代码如下: import java.util.Arrays; //利用二进制算法进行全排列 //count1:170187 //count2:291656 public class test { public static void main(String[] args) { long start=System.currentTimeMillis(); count2(); long end=S

PHP中排列组合及性能对比

  排列组合公式/排列组合计算公式公式P是指排列,从N个元素取R个进行排列. 公式C是指组合,从N个元素取R个,不进行排列了,但在php中我们可以用N种方法写出来了,但每一种写法的性能会不同,下面我们就来看看吧. 需求是这样的: 找到数组中所有可能的指定长度的组合,要求没有重复. 方法一: 代码如下   function getCombinationToString($arr,$m){ $result = array(); if ($m ==1){ return $arr; } if ($m =