一个JAVA的数字排列组合的算法题目? 例如下面的数据1,2 ,3 写出排列组合的算法,并且写出的算法要通用。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class Test31 { public static void main(String[] args) { int[] ia = {1, 2, 3, 4}; int n = 3; permutation(ia, n);// combination(ia, n); } public static void permutation(int[] ia, int n) { permutation("", ia, n); } public static void permutation(String s, int[] ia, int n) { if(n == 1) { for(int i = 0; i < ia.length; i++) { System.out.println(s+ia[i]); } } else { for(int i = 0; i < ia.length; i++) { String ss = ""; ss = s+ia[i]+", "; //建立没有第i个元素的子数组 int[] ii = new int[ia.length-1]; int index = 0; for(int j = 0; j < ia.length; j++) { if(j != i) { ii[index++] = ia[j]; } } permutation(ss, ii, n-1); } } } public static void combination(int[] ia, int n) { }}排列的写好了,组合的还没实现 public class Test31 { public static void main(String[] args) { int[] ia = {1, 2, 3, 4}; int n = 3; System.out.println("排列结果 : "); permutation(ia, n); System.out.println("组合结果 : "); combination(ia, n); } public static void permutation(int[] ia, int n) { permutation("", ia, n); } public static void permutation(String s, int[] ia, int n) { if(n == 1) { for(int i = 0; i < ia.length; i++) { System.out.println(s+ia[i]); } } else { for(int i = 0; i < ia.length; i++) { String ss = ""; ss = s+ia[i]+", "; //建立没有第i个元素的子数组 int[] ii = new int[ia.length-1]; int index = 0; for(int j = 0; j < ia.length; j++) { if(j != i) { ii[index++] = ia[j]; } } permutation(ss, ii, n-1); } } } public static void combination(int[] ia, int n) { combination("", ia, n); } public static void combination(String s, int[] ia, int n) { if(n == 1) { for(int i = 0; i < ia.length; i++) { System.out.println(s+ia[i]); } } else { for(int i = 0; i < ia.length-(n-1); i++) { String ss = ""; ss = s+ia[i]+", "; //建立从i开始的子数组 int[] ii = new int[ia.length-i-1]; for(int j = 0; j < ia.length-i-1; j++) { ii[j] = ia[i+j+1]; } combination(ss, ii, n-1); } } }}OK了,没有详细写测试函数,自己修改代码测试吧。 收藏下4L。赞一个,再研究!tks! 1。递归2。二叉树(参考数据结构的书籍)3。二进制解法。//假设a0,a1,a2,a3,...a依次排列,那么1就代表该数输出,0代表该数不输出.此题中,1,2,3建立一个数组,下标分别为0,1,2.那么二进制组合:000, 001,//表示下标为2的数输出010,011,//表示下标为1,2的数输出100,101,111 Swingworker的问题 关于DataInputStream类的使用 对象比较小问题 一个无法解决的问题???? 请高手指教!基础知识问题,谢谢!! 常量成员的初始化 考考你的智商 在JAVA里用什么方法读写XML文档? 两个问题,请指教,谢谢! 问一个比较土的问题! 如何在eclipse里使用外部jar文件 寻求这套试题的答案1
public static void main(String[] args) {
int[] ia = {1, 2, 3, 4};
int n = 3;
permutation(ia, n);
// combination(ia, n);
}
public static void permutation(int[] ia, int n) {
permutation("", ia, n);
}
public static void permutation(String s, int[] ia, int n) {
if(n == 1) {
for(int i = 0; i < ia.length; i++) {
System.out.println(s+ia[i]);
}
} else {
for(int i = 0; i < ia.length; i++) {
String ss = "";
ss = s+ia[i]+", ";
//建立没有第i个元素的子数组
int[] ii = new int[ia.length-1];
int index = 0;
for(int j = 0; j < ia.length; j++) {
if(j != i) {
ii[index++] = ia[j];
}
}
permutation(ss, ii, n-1);
}
}
}
public static void combination(int[] ia, int n) {
}
}排列的写好了,组合的还没实现
public class Test31 {
public static void main(String[] args) {
int[] ia = {1, 2, 3, 4};
int n = 3;
System.out.println("排列结果 : ");
permutation(ia, n);
System.out.println("组合结果 : ");
combination(ia, n);
}
public static void permutation(int[] ia, int n) {
permutation("", ia, n);
}
public static void permutation(String s, int[] ia, int n) {
if(n == 1) {
for(int i = 0; i < ia.length; i++) {
System.out.println(s+ia[i]);
}
} else {
for(int i = 0; i < ia.length; i++) {
String ss = "";
ss = s+ia[i]+", ";
//建立没有第i个元素的子数组
int[] ii = new int[ia.length-1];
int index = 0;
for(int j = 0; j < ia.length; j++) {
if(j != i) {
ii[index++] = ia[j];
}
}
permutation(ss, ii, n-1);
}
}
}
public static void combination(int[] ia, int n) {
combination("", ia, n);
}
public static void combination(String s, int[] ia, int n) {
if(n == 1) {
for(int i = 0; i < ia.length; i++) {
System.out.println(s+ia[i]);
}
} else {
for(int i = 0; i < ia.length-(n-1); i++) {
String ss = "";
ss = s+ia[i]+", ";
//建立从i开始的子数组
int[] ii = new int[ia.length-i-1];
for(int j = 0; j < ia.length-i-1; j++) {
ii[j] = ia[i+j+1];
}
combination(ss, ii, n-1);
}
}
}
}OK了,没有详细写测试函数,自己修改代码测试吧。
赞一个,再研究!
tks!
2。二叉树(参考数据结构的书籍)
3。二进制解法。
//假设a0,a1,a2,a3,...a依次排列,那么1就代表该数输出,0代表该数不输出.
此题中,1,2,3建立一个数组,下标分别为0,1,2.
那么二进制组合:
000,
001,//表示下标为2的数输出
010,
011,//表示下标为1,2的数输出
100,
101,
111