【问题标题】:Recursively generate string array of all combinations (of length k) of characters in a char array递归生成字符数组中所有字符组合(长度为k)的字符串数组
【发布时间】:2019-07-24 09:39:53
【问题描述】:

对于 java 实践,我正在尝试编写一个类,该类在字符数组中生成所有字母组合并将它们放入字符串数组中。 该对象应使用字符数组构建,并且应具有将 int 作为输入的方法。 int 将确定组合的长度。

例如,输入:

char[] charArray = { 'a', 'b' };
int k = 3;

输出:

[ "aaa", "aab", "aba", "abb", "baa", "bab", "bba", "bbb" ]

该方法应该是递归的,每次它应该用 k-1 调用自己。

我尝试了一个简化版本,生成了一个字符串,其中所有排列都用下划线分隔,但我没有得到我想要的输出。

public String generate(int k) {
    if (k == 0) return "_";
    String s = "";
    for (char c : charArray) {
        s = s+c+generate(k-1);
    }
    return s;
}

我的输出是:

"aaa_b_ba_b_baa_b_ba_b_"

代替:

"aaa_aab_aba_abb_baa_bab_bba_bbb"

【问题讨论】:

    标签: java arrays string algorithm recursion


    【解决方案1】:

    尝试这样的事情(使用 java 8):

    public String generate(String[] stringArray, String accumulator, int k) {
        if (k == 0) return accumulator;
        return Arrays.stream(stringArray).map(s -> generate(accumulator + s, k - 1)).collect(Collectors.joining("_"));
    }
    
    public String generate(String[] stringArray, int k) {
        returngenerate(stringArray, "", k);
    }
    

    我只需要将chars 的数组更改为Strings 的数组:

    String[] stringArray = new String[]{ "a", "b" };
    

    然后调用generate(stringArray, 3)方法生成结果:

    aaa_aab_aba_abb_baa_bab_bba_bbb
    

    【讨论】:

      【解决方案2】:

      您的方法还需要一个包含预值的参数。

      您可以根据自己的目的尝试以下代码段:

      public static String generate(String prefix, int k) {
              String s = "";
              if (k == 0)
                  return prefix + "_";
      
              for (char c : charArray) {
                  String newPrefix = prefix + c;
                  s = s + generate(newPrefix, k - 1); 
              }
              return s;
          }
      

      此代码将生成"aaa_aab_aba_abb_baa_bab_bba_bbb_",因此您必须删除最后一个下划线。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 2012-05-17
        • 2018-04-21
        • 1970-01-01
        • 2015-06-24
        相关资源
        最近更新 更多