今天在工作中碰到一个问题,在java中输入比如1,2,3 三个数 我想要得到其所有的排列组合 比如 123,312,132,231,213,321 这些
上网找了找别人的算法,稍加整理,分享给大家代码如下
- import java.util.Arrays; //用于数组输出。
- import java.util.LinkedList;
- import java.util.List;
- public class test
- {
- static String toBeArranged ="123456"; //待排列的字符串。
- static String[] array = stringToStringArray(toBeArranged); //将其转换成数组。{"1","2"...}
- static int length=array.length; //字符串长度。
- static int k=0; //存放数组时计数。
- static String[] result=new String[total(length)]; //数组大小是length的阶乘。
- public static void main(String[] args)
- {
- listAll(Arrays.asList(array), "");
- System.out.println(Arrays.toString(result)); //输出。
- }
- //主要的计算方法。
- public static void listAll(List candidate, String prefix)
-
- {
- if(prefix.length()==length) //小于字符串长度的组合忽略。
- {
- result[k++]=prefix; //存放数组里。
- }
- for(int i=0;i
- {
- List tmp = new LinkedList(candidate);
- {
- listAll(tmp, prefix + tmp.remove(i)); //函数中的参数从右边开始解析
- }
- }
- }
- //将字符串转成数组。
- static String[] stringToStringArray(String s)
- {
- int length=s.length();
- if(length<=0)
- {
- return new String[0];
- }
- String[] result=new String[length];
- for(int i=0;i
- {
- result[i]=""+s.charAt(i);
- }
- return result;
- }
- //计算number阶乘,为结果数组的容量。
- static int total(int number)
- {
- int number1=1;
- for(int i=1;i<=number;i++)
- {
- number1*=i;
- }
- return number1;
- }
- }
时间: 2024-10-12 07:45:19