生成字符串

时间:2016-03-29 22:50:43

标签: java recursion

所以我试图创建一个生成给定字符串幂集的方法。到目前为止,我已经提出错误输出" [abc,bc,c,b,ac,c,a,ab,b,a]"

public static ArrayList<String> powerSet(String s){
        ArrayList<String> set = new ArrayList<String>();

        if(!s.isEmpty())
        set.add(s);

        for(int i=0; i<s.length();i++){
            String substring = s.substring(0, i) + s.substring(i+1);
            set.addAll(powerSet(substring));
        }


        return set;
     }

这是作业作业的一部分,我不允许创建任何类型的辅助类,并且该方法必须是ArrayList类型。该方法必须涉及递归。

我感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

我通常会帮助我的朋友找到自己的解决方案...... 但这次我只给你代码......请仔细阅读!不要复制!!

public static ArrayList<String> powerSet(String s){
    ArrayList<String> ans = new ArrayList<String>();

    if(s.isEmpty()){
        ans.add("");
        return ans;
    }

    ArrayList<String> withFirstElem = new ArrayList<String>();
    ArrayList<String> withoutFirstElem = new ArrayList<String>();

    withoutFirstElem = powerSet(s.substring(1));

    for(String i : withoutFirstElem){
        withFirstElem.add(i+s.charAt(0)); // adding first elem
    }
    ans.addAll(withFirstElem);
    ans.addAll(withoutFirstElem);

    return ans;
 }

答案 1 :(得分:1)

String input = "abc";

for (int i = 1; i <(int) Math.pow(2,input.length()) ; i++) {

    String eleman = "";
    int arrayindex = 0;

    for (int k = input.length() -1; k >= 0; k--) {

        String index = ((i >> k) & 1) == 1 ? "1" : "0";

        if(index == "1"){
            eleman += input.charAt(arrayindex); 
        }
             arrayindex++;
        }

        System.out.println(eleman);
    }    

并回答

c
b
bc
a
ac
ab
abc