標籤:java學習 java java面試題
今天在工作中碰到一個問題,在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)
【Java中 任意幾個數字擷取其所有的排列組合】