java算法求大神帮忙!!!!!

各位大神想想办法类似于输入{1,2,3,4}
输出
{1,2,3}
{1,2,4}
{2,3,4}
{1,2}
{1,3}
{1,4}
{2,3}
{2,4}
{3,4}
{1}
{2}
{3}
{4}
的这种方法该怎么写啊 输入的数组长度不确定 都折腾我好久了 这个问题

n选m的算法
http://blog.sina.com.cn/s/blog_822120bf010147mi.html
你这个是把m从1~n全部调用下

看起来像组合算法,你可以看看这篇博文,工具类也写好了http://blog.csdn.net/guo_rui22/article/details/2199732

先输出一个数的 1 2 3 4
在输出俩数的 12 13 14 23 24 34
然后三个数的123 124 234
浅谈for循环 判断条件是后面的数不能比前面的大

为什么输出结果没有 {1,3,4}。 如果有{1,3,4} 以下是我的结果
public class Test {

//a 表示要输出的数组
static int a[];
// n表示要输出的组合数个数
static int n;

public static void main(String[] args) {
    a =new int[] {1,2,3,4};
    int b[] = new int[a.length];
    for(int i= a.length-1 ;i>=1 ;i--)
    {
        n = i;
        dfs(b,0,0);
    }
}

/**
 * 
 * @param b  记录数组,用来输出
 * @param start 从a数组start位置开始记数
 * @param t 当前需要记录的位置
 */
private static void dfs(int[] b,int start,int t) {
    //如果记录的个数已经达到n个,一组记录完,就输出。
    if(t == n) {
        System.out.print("{"+b[0]);
        for(int i =1 ;i < t;i++)
            System.out.print(","+b[i]);
        System.out.println("}");
        return ;
    }
    //记录t位置的数字
    for(int i  = start; i < a.length ;i++) {
        b[t] = a[i]; //记录t位置如果是a[i]的话 下面就开始记录t+1的位置
        dfs(b,i+1,t+1);
    }

}

}

public class AA {
public static void count(int i, String str, int[] num,int n) {
if(n==0){
str="{"+str.substring(0,str.length()-1)+"}";
System.out.println(str);
return;
}
if(i==num.length){
return;
}
count(i+1,str+num[i]+",",num,n-1);
count(i+1,str,num,n);
}
public static void main(String[] args) {
int[] num=new int[]{1,2,3,4};
String str="";
for(int i=1;i<=num.length-1;i++)
count(0,str,num,i);
}
}
百度的