楼主的问题其实并不简单,楼主只是问了一个最简单的方式而已。。 就是从16个不同的数里面挑8个以下不同的数,是这个意思吧? 这个相对是最容易实现的方式了, 代码如下:public class Test2 { public static void main(String[] args) throws IOException { String[] s = { "A", "B", "C", "D" }; new Test2().bianli(s); } public void bianli(String[] s) { for (int i1 = 0; i1 < s.length; i1++) { for (int i2 = 0; i2 < s.length; i2++) { for (int i3 = 0; i3 < s.length; i3++) { Set<String> set=new HashSet<>(); set.add(s[i1]); set.add(s[i2]); set.add(s[i3]); shuchu(set); } } } } public void shuchu(Set<String> set){ for(String xx:set){ System.out.print(xx); } System.out.println(); } } 其实这个问题往深里面想的话,大多数人一天都做不出来的。
我这里设计的是从4个数里面选所有3个以下的数 结果: A AB AC DA AB AB ABC DAB AC ABC AC DAC DA DAB DAC DA AB AB ABC DAB AB B BC DB ABC BC BC DBC DAB DB DBC DB AC ABC AC DAC ABC BC BC DBC AC BC C DC DAC DBC DC DC DA DAB DAC DA DAB DB DBC DB DAC DBC DC DC DA DB DC D
package Test201303;public class Test20130327 { private static final int LEN = 8; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub getSub("ABCDEFGHIJK",LEN); } /* * get the sub string */ public static void getSub(String str,int len) { // get length int length = str.length(); // start and end position //int start = 0; int end = len; // for for(int i=0;i<length;i++){ if((i+len)>length){ end = length; }else{ end = i+len; } for(int j = i;j<end;j++){ String temp = str.substring(i,j+1); System.out.println(temp); } }
public static void zuhe(String str , String result , int maxLength , int index){ System.out.println(result); if(result.length() == maxLength) return ; for (int i = index ; i < str.length() ; i++) { if(!(index == 0 || i == index)) return ; zuhe(str , result + str.charAt(i), 8 , i + 1); } }}
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH B BC BCD BCDE BCDEF BCDEFG BCDEFGH BCDEFGHI C CD CDE CDEF CDEFG CDEFGH CDEFGHI CDEFGHIJ D DE DEF DEFG DEFGH DEFGHI DEFGHIJ DEFGHIJK E EF EFG EFGH EFGHI EFGHIJ EFGHIJK F FG FGH FGHI FGHIJ FGHIJK G GH GHI GHIJ GHIJK H HI HIJ HIJK I IJ IJK J JK K
就是从16个不同的数里面挑8个以下不同的数,是这个意思吧?
这个相对是最容易实现的方式了,
代码如下:public class Test2 {
public static void main(String[] args) throws IOException {
String[] s = { "A", "B", "C", "D" };
new Test2().bianli(s);
} public void bianli(String[] s) {
for (int i1 = 0; i1 < s.length; i1++) {
for (int i2 = 0; i2 < s.length; i2++) {
for (int i3 = 0; i3 < s.length; i3++) {
Set<String> set=new HashSet<>();
set.add(s[i1]);
set.add(s[i2]);
set.add(s[i3]);
shuchu(set);
}
}
} }
public void shuchu(Set<String> set){
for(String xx:set){
System.out.print(xx);
}
System.out.println();
}
}
其实这个问题往深里面想的话,大多数人一天都做不出来的。
结果:
A
AB
AC
DA
AB
AB
ABC
DAB
AC
ABC
AC
DAC
DA
DAB
DAC
DA
AB
AB
ABC
DAB
AB
B
BC
DB
ABC
BC
BC
DBC
DAB
DB
DBC
DB
AC
ABC
AC
DAC
ABC
BC
BC
DBC
AC
BC
C
DC
DAC
DBC
DC
DC
DA
DAB
DAC
DA
DAB
DB
DBC
DB
DAC
DBC
DC
DC
DA
DB
DC
D
private static final int LEN = 8;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
getSub("ABCDEFGHIJK",LEN);
} /*
* get the sub string
*/
public static void getSub(String str,int len) {
// get length
int length = str.length();
// start and end position
//int start = 0;
int end = len;
// for
for(int i=0;i<length;i++){
if((i+len)>length){
end = length;
}else{
end = i+len;
}
for(int j = i;j<end;j++){
String temp = str.substring(i,j+1);
System.out.println(temp);
}
}
}
}
static Set<String> all=new HashSet<>();
public static void main(String[] args) throws IOException {
Set<String> set=new HashSet<>();
set.add("A");
set.add("B");
set.add("C");
set.add("D");
set.add("E");
new Test2().bianli(set);
for(String str:all){
System.out.println(str);
}
}
public void bianli(Set<String> set){
for(String s:set){
Set<String> set2=copy(set);
set2.remove(s);
if(set2.size()<=3){
getString(set2);
}
if(set2.size()>1){
bianli(set2);
}
}
}
public static Set<String> copy(Set<String> set){
Set<String> set2=new HashSet<>();
for(String str:set){
set2.add(str);
}
return set2;
}
public void getString(Set<String> set){
StringBuilder builder=new StringBuilder();
for(String str:set){
builder.append(str);
}
all.add(builder.toString());
}
}
showCombination();
} public static void showCombination(){
String str = "ABCDEFGHIJK";
for(int i=0; i<str.length(); i++){
for(int j=i; j<(i+8 > str.length() ? str.length() : i+8); j++){
System.out.print(str.substring(i, j+1));
System.out.println();
}
System.out.println();
}
}
}
A
AB
ABC
ABCD
ABCDE
ABCDEF
ABCDEFG
ABCDEFGHB
BC
BCD
BCDE
BCDEF
BCDEFG
BCDEFGH
BCDEFGHIC
CD
CDE
CDEF
CDEFG
CDEFGH
CDEFGHI
CDEFGHIJD
DE
DEF
DEFG
DEFGH
DEFGHI
DEFGHIJ
DEFGHIJKE
EF
EFG
EFGH
EFGHI
EFGHIJ
EFGHIJKF
FG
FGH
FGHI
FGHIJ
FGHIJKG
GH
GHI
GHIJ
GHIJKH
HI
HIJ
HIJKI
IJ
IJKJ
JKK
package com.zf.maven;public class TestZuHe { public static void main(String[] args) { String str = "ABCDEFGHIJK"; zuhe(str , "" , 8 , 0);
}
public static void zuhe(String str , String result , int maxLength , int index){
System.out.println(result);
if(result.length() == maxLength)
return ;
for (int i = index ; i < str.length() ; i++) {
if(!(index == 0 || i == index))
return ;
zuhe(str , result + str.charAt(i), 8 , i + 1);
}
}}
A
AB
ABC
ABCD
ABCDE
ABCDEF
ABCDEFG
ABCDEFGH
B
BC
BCD
BCDE
BCDEF
BCDEFG
BCDEFGH
BCDEFGHI
C
CD
CDE
CDEF
CDEFG
CDEFGH
CDEFGHI
CDEFGHIJ
D
DE
DEF
DEFG
DEFGH
DEFGHI
DEFGHIJ
DEFGHIJK
E
EF
EFG
EFGH
EFGHI
EFGHIJ
EFGHIJK
F
FG
FGH
FGHI
FGHIJ
FGHIJK
G
GH
GHI
GHIJ
GHIJK
H
HI
HIJ
HIJK
I
IJ
IJK
J
JK
K