求12345的任意组合。
public class test{
public static void main(String[] args){
String[] a={"1","2","3","4","5"};
int len=a.length;
int max=(int)Math.pow(2,len);
for(int i=1;i<max;i++){
for(int j=0;j<len;j++){
if((i&(1<<j))!=0)System.out.print(a[j]);
}
System.out.println();
}
}
}
C:\ww>java test
1
2
12
3
13
23
123
4
14
24
124
34
134
234
1234
5
15
25
125
35
135
235
1235
45
145
245
1245
345
1345
2345
12345
public class test{
public static void main(String[] args){
String[] a={"1","2","3","4","5"};
int len=a.length;
int max=(int)Math.pow(2,len);
for(int i=1;i<max;i++){
for(int j=0;j<len;j++){
if((i&(1<<j))!=0)System.out.print(a[j]);
}
System.out.println();
}
}
}
C:\ww>java test
1
2
12
3
13
23
123
4
14
24
124
34
134
234
1234
5
15
25
125
35
135
235
1235
45
145
245
1245
345
1345
2345
12345
public static void main(String[] args){
String[] a={"1","2","3","4","5"};
int len=a.length;
int max=(int)Math.pow(2,len);//数组中共有5个元素,每个元素有存在和不存在两种可能,共有
2^5种可能
for(int i=1;i<max;i++){
for(int j=0;j<len;j++){
if((i&(1<<j))!=0)System.out.print(a[j]);//判断第N个元素是否存在,存在则输出
//前面的数字比后面大的情况不能打印
//比如:21,32...
}
System.out.println();
}
}
}
我知道可以通过1&N!=0来判断N是否为奇数,但1<<j是什么玩意就不懂了,呵呵,位操作符我基本没用.
小的数字必须在前31种
if((i&(1<<j))!=0) i相当于指示那几个数字可用,j用来把可用的数字按序输出