求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

解决方案 »

  1.   

    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);//数组中共有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();
    }
    }
    }
      

  2.   

    难理解就是那个位操作符了...if((i&(1<<j))!=0
    我知道可以通过1&N!=0来判断N是否为奇数,但1<<j是什么玩意就不懂了,呵呵,位操作符我基本没用.
      

  3.   

    12345的任意组合有325种情况
    小的数字必须在前31种
    if((i&(1<<j))!=0) i相当于指示那几个数字可用,j用来把可用的数字按序输出