求字符串组合

输入一个字符串,求其所有的组合。例如输入字符串abc,
则打印出由字符a,b,c所能组合出来的所有字符串a,b,c,ab,ac,bc,abc。
结果请按字母顺序输出。

1:思路:
假设该字符串数组长度为len,则其组合按长度分类的话有1,2,…..m,….len。在长度为m的组合中,其分类可分成两类:包含数组首个元素的和不包含数组首个元素的。
a:包含的,则从余下的元素中选取m-1个元素的组合
b:不包含的,从余下的元素中选取m个元素的组合
将a和b两种情况综合在一起,便是m个元素的组合方式。

那么求一个数组的所有组合方式的话,要对其长度做一个循环,将所有组合方式综合起来。

2 : 方法:

(1)求在数组arr中,m个元素的组合,下标从begin-1开始,即分为包含该小标元素和不包含该下标元素的情况。

/**
     * 
     * @param arr 字符串数组
     * @param begin 开始数(下标+1)
     * @param num  组合个数
     * @return
     */
public static ArrayList<String> cal(String[] arr,int begin,int num){
    ArrayList<String> result=new ArrayList<String>();
        if(num<=0){
            return null;
        }
        if(begin>arr.length){
            return null;
        }
        if(num-1>arr.length-begin){
            return null;
        }
        //1:contain first
        String first=arr[begin-1];
        ArrayList<String> test=cal(arr,begin+1,num-1);
        if(test!=null){
            for(String a:test){
                a=first+a;
                //System.out.println(a);
                result.add(a);
            }
        }
        if(num==1){
            result.add(first);
        }

        //2:do not contain the first
        ArrayList<String> test2=cal(arr,begin+1,num);
        if(test2!=null){
            for(String o:test2){
                result.add(o);
            }
        }
        return result;
    }

(2)对数组长度进行循环求组合

ArrayList<String> result=new ArrayList<String>();
    for(int i=0;i<arr.length;i++){
        result.addAll(cal(arr,1,i+1));
    }
  • 思考:如果是求所有字符的排列该如何求–明天见咯?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值