【问题标题】:Generating the power set of a String生成字符串的幂集
【发布时间】:2016-03-29 22:50:42
【问题描述】:

所以我正在尝试创建一种方法来生成给定字符串的幂集。到目前为止,我想出了这个错误地输出“[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 类型。该方法必须涉及递归。

感谢您的帮助!

【问题讨论】:

  • 答案应该是什么?顺序重要吗?
  • @PaulBoddington 顺序无关紧要,但正确答案应该是“”,“a”,“b”,“c”,“ab”,“ac”, “bc”,“abc”。
  • 好的,你基本上已经完成了。只需添加“”,使用HashSet而不是ArrayList,然后在最后转换为ArrayList。
  • 是的,HashSet 可以解决这个问题。 Set 是一个不允许重复的集合。
  • 太棒了!谢谢你的建议!

标签: java recursion


【解决方案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;
 }

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

    • 如果字符串是“abcd”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多