public class Untitled2 {    private int[] base;
    public Untitled2(int count) {
        base = new int[count];
        for (int i = 0; i < count; i++) {
            base[i] = (int)Math.pow( 10, i );
        }    }    /**
     *
     */
    public static void main(String[] args) {        int[] source = new int[]{1,2,3};
        int[] result = new int[]{0};
        Untitled2 t = new Untitled2(source.length);
        t.get( source,result,0 );
    }    public void get( int[] source, int[]result, int index ){
        for (int i = 0; i < source.length; i++) {
            result[0] += source[i] * base[source.length-1-index];
            if( index < source.length - 1 ){
                index++;
                get( source, result, index );
                index--;
                result[0] -= source[i] * base[source.length-1-index];
            } else {
                System.out.println(result[0]);
                result[0] -= source[i]*base[source.length-1-index];
            }
        }    }
}参考参考吧~~~

解决方案 »

  1.   

    其实思路是可以很简单的,
    存在以下元素:
    a b c d e f g ,对应的存在一个标记位,0 代表没有选择     1 代表有选择
    0 0 0 0 0 0 1
    0 0 0 0 0 1 0
    .....
    1 1 1 1 1 1 1这个就是一个二进制而已,所以最后的结果是 (2 ^ n) - 1  (如果全部不选也算上的话就是 2 ^ n)
    你要在程序做也只是像上面的那样,弄一个变量 index出来,从 1  到 (2 ^ n) - 1循环
    然后不断和相应的位做“与”操作就可以知道相应的元素选中没有