java 编程实现:  利用1、2、2、3、4这五个数字,写一函数打印出所有不同的排列,要求打印的不能有重复。例如:12234,21234

解决方案 »

  1.   

    求全排列的问题,可以用递归解决,给你个提示:P(N,M) = N * P(N-1,M-1)
      

  2.   

    要学会根据数学公式看出程序怎么写啊。再提示你一下。P(N,M) = N * P(N-1,M-1)
    P(N,M)表示:从N个元素里取M个做全排列,也就是说有M个格子,要从N件东西里选出M件放进去;
    乘号前边的N表示:对于每个元素都有一次排在第一格的机会,一共N个元素,所以第一格的排法有N种情况;
    P(N-1,M-1)表示:第一格排完以后,剩下了M-1个格子,这M-1个格子有P(N-1,M-1)种排法,由此引起递归。写程序也一样,假设N个元素放在一个原始列表(sourceList)里:
    1、先生成一个结果列表(resultList),用来放最终结果;
    2、N个元素循环,每次取一个出来,剩下的元素组成一个剩余元素列表(remainderList);
    3、对remainderList递归调用生成排列结果列表(subList);
    4、把刚才取出来的那一个元素插入在subList中每一项里的第一格里;
    5、把生成的结果放入resultList,返回。