【Java中 任意几个数字获取其所有的排列组合】
2015-04-29 09:31
573 查看
今天在工作中碰到一个问题,在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;
}
}
上网找了找别人的算法,稍加整理,分享给大家代码如下
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;
}
}
相关文章推荐
- 【Java中 任意几个数字获取其所有的排列组合】
- 任意数字、字符序列,输出它们所有的排列组合
- 任意数字序列“123456”之类,输出它们所有的排列组合
- 如何得到指定数字中任意几个数字的组合
- java使用正则表达式获取字符串中的所有英文单词或数字
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
- 从n个数组中任意选取一个元素的所有组合的Java实现(组合问题)
- java写出一个序列的所有排列组合
- 形如数组1223打印所有不同的组合排列java
- Java求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包动态规划问题求解)
- 用几个数字任意组合成最大数
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
- 字母a-z,数字0-9,现需要其中任意3个作为密码,请输出所有可能组合。
- 用1、2、3、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列 要求:"4"不能在第三位,"3"与"5"不能相连。
- 2013年用友校招编程题:用1、2、2、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列
- 用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列, 如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 输入两个整数n和m, 从数列1,2,...,n中任意选择几个数,使其和等于m, 要求编写程序输出所有的组合
- java获取一维数组中连续数字分成几个连续的数字数组