{1,2,3} 的所有排列组合方式
{1,2,3} {1,23} {12,3} {13,2} {123}
请大家给个想法 或者 算法实现
最简单的是穷举法,近期我会在CSDN的博客里解答你这个问题:) 请关注 80后传播者的微博和博客
从一位数循环到n位数,对任意i位数(1<=i<=n),穷举所有情况,最后就是组合
第一步,做一个数字表,从1到3,这时输出数字位置记为1
第二步,从数字表里拿出最小的那个数字,放在输出数字位置,输出数字位置+1,
然后同样拿出剩下的数字中最小的那个放在输出数字位置,直到数字全取出,输出该数字;
第三步,从前面输出的数字中拿出最后一位,放回数字表,当数字表里的数字大于1,取出数字表中比刚放入数字表中那个数字大的最小的那个数字,
放到输出数字位置(刚放入数字表中那个数字原来在的位置),然后回到第二步;
第四步,如果数字表中没有比刚放入数字表中那个数字大的数字或数字表里的数字小于2,继续从前面输出的数字中拿出剩下的最后那位数字,
放到数字表中,直到没办法取出数字表中比刚放入数字表中那个数字大的数字。
输出顺序应该是这样的
123
132
213
231
312
321
用递归算法:
去集合的第一个元素(1),剩下的子集{2,3},
同样去求子集的排列组合,然后1和子集的所有排列组合结果合并;
子集{2,3}的求解:
取2 ,子集{3} 这时候子集就一个元素了,递归到尾部了,结果就是{2,3},{23}
然后和{1}合并,就是{1,2,3},{1,23},{123}
接下来继续取第二个元素(2),继续递归下去,就得到结果:
{2,1,3},{2,13},{213}
后面继续
。。。。。。。。。。。