输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻
2009-12-23 17:08
639 查看
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
/**
*
* @author 赵学庆 www.java2000.net //摘录此人的作品
*
*/
public class T {
public static List<String> find(List<String> list) {
List<String> rtn = new ArrayList<String>();
String str;
for (int i = 0; i < list.size(); i++) {
str = list.get(i);
list.remove(i);
if (list.size() == 0) {
rtn.add(str);
} else {
List<String> sList = find(list);
for (String s : sList) {
rtn.add(str + s);
if (s.length() == 5) {
addNumber(str + s);
}
}
}
list.add(i, str);
}
return rtn;
}
public static void addNumber(String str) {
if (str.charAt(2) == '4' || str.contains("35") || str.contains("53")) {
return;
}
set.add(str);
}
public static Set<String> set = new TreeSet<String>();
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
find(list);
System.out.println(set.size());
int cols = 10;
for (String s : set) {
System.out.print(s+" ");
if(cols--==1) {
System.out.println();
cols = 10;
}
}
}
}
网友提供的一个比较优化的算法
import java.util.Set;
import java.util.TreeSet
/**
* 原始版本没有考虑重复问题,我进行了修正.<br>
* 此算法的精华就是,让一个字符串的所有位置都进行互换,<br>
* 这样就产生了所有可能出现的字符串。
*
* @author 赵学庆,nicky_zs <a href="http://www.java2000.net">www.java2000.net</a>
*/
public class MyTest {
public static void main(String args[]) {
char[] number = new char[] { '1', '2', '2', '3', '4', '5' };
perm(number, 0, number.length - 1);
System.out.println(set.size());
int cols = 10;
for (String s : set) {
System.out.print(s + " ");
if (cols-- == 1) {
System.out.println();
cols = 10;
}
}
}
public static void addNumber(String str) {
set.add(str);
}
public static Set<String> set = new TreeSet<String>();
public static void perm(char[] n, int beg, int end) {
if (beg == end) {
String result = String.valueOf(n);
if (n[2] == '4')
return;
if (result.contains("35") || result.contains("53"))
return;
addNumber(String.valueOf(n));
return;
}
for (int i = beg; i <= end; ++i) {
swap(n, beg, i);
perm(n, beg + 1, end);
swap(n, beg, i);
}
}
public static int number = 0;
public static void swap(char[] n, int a, int b) {
char temp = n[a];
n[a] = n[b];
n[b] = temp;
}
}
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
/**
*
* @author 赵学庆 www.java2000.net //摘录此人的作品
*
*/
public class T {
public static List<String> find(List<String> list) {
List<String> rtn = new ArrayList<String>();
String str;
for (int i = 0; i < list.size(); i++) {
str = list.get(i);
list.remove(i);
if (list.size() == 0) {
rtn.add(str);
} else {
List<String> sList = find(list);
for (String s : sList) {
rtn.add(str + s);
if (s.length() == 5) {
addNumber(str + s);
}
}
}
list.add(i, str);
}
return rtn;
}
public static void addNumber(String str) {
if (str.charAt(2) == '4' || str.contains("35") || str.contains("53")) {
return;
}
set.add(str);
}
public static Set<String> set = new TreeSet<String>();
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
find(list);
System.out.println(set.size());
int cols = 10;
for (String s : set) {
System.out.print(s+" ");
if(cols--==1) {
System.out.println();
cols = 10;
}
}
}
}
网友提供的一个比较优化的算法
import java.util.Set;
import java.util.TreeSet
/**
* 原始版本没有考虑重复问题,我进行了修正.<br>
* 此算法的精华就是,让一个字符串的所有位置都进行互换,<br>
* 这样就产生了所有可能出现的字符串。
*
* @author 赵学庆,nicky_zs <a href="http://www.java2000.net">www.java2000.net</a>
*/
public class MyTest {
public static void main(String args[]) {
char[] number = new char[] { '1', '2', '2', '3', '4', '5' };
perm(number, 0, number.length - 1);
System.out.println(set.size());
int cols = 10;
for (String s : set) {
System.out.print(s + " ");
if (cols-- == 1) {
System.out.println();
cols = 10;
}
}
}
public static void addNumber(String str) {
set.add(str);
}
public static Set<String> set = new TreeSet<String>();
public static void perm(char[] n, int beg, int end) {
if (beg == end) {
String result = String.valueOf(n);
if (n[2] == '4')
return;
if (result.contains("35") || result.contains("53"))
return;
addNumber(String.valueOf(n));
return;
}
for (int i = beg; i <= end; ++i) {
swap(n, beg, i);
perm(n, beg + 1, end);
swap(n, beg, i);
}
}
public static int number = 0;
public static void swap(char[] n, int a, int b) {
char temp = n[a];
n[a] = n[b];
n[b] = temp;
}
}
相关文章推荐
- 输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻
- 输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻
- 输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻
- 输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻
- 面试题:输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻
- 输出1,2,2,3,4,5的所有排列组合,4不能在第3位,3和5不能相邻
- 输出{1,2,2,3,4,5}排列组合,4不能在第三位,3和5不能相邻
- 有1,2,2,3,4,5六个数,要求输出他们组合的全排列,4不能在第三位,5和3不能相邻
- 编程:用java 语言实现,输入一个数,就相应地输出的几维数组!||用1、2、2、3、4、5这六个数字,用java写一个函数,打印出所有不同的排列,要求:"4"不能在第三位,"3"与"5"不能相连
- (原创)java 输出排列组合,’4‘ 不能在第三位,‘3’,‘5’不能相连。
- 编程题:输出字符集合的所有排列组合。
- 输出所有排列组合
- 用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
- 输出n对括号的所有有效排列组合
- 1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列, 如:512234、412345等.要求:"4"不能在第三位,"3"与"5"不能相连.
- 122345这6个数字,输出它所有可能的组合;要求4不能在第3位,3和5不能相连。
- 输出字符串的所有排列组合
- 用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列, 如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.
- 用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
- 输出N个数中取M个数的所有组合,排列情况