【问题标题】:How to obtain different combinations in Java [closed]如何在Java中获得不同的组合[关闭]
【发布时间】:2012-04-18 13:10:56
【问题描述】:

如果我有一个字符串,请说“ABCDE”,获得两者组合的最佳方法是什么?是否有用于此类任务的 API?

  1. “AB”
  2. “交流”
  3. “广告”
  4. “AE”
  5. “公元前”
  6. “BD”
  7. “BE”
  8. “CD”
  9. “CE”
  10. “德国”

【问题讨论】:

  • 据我所知,没有内置的 API。您必须编写自己的代码。

标签: java string api combinations


【解决方案1】:
private static List<String> getCombinations(String input) {
    ArrayList<String> result = new ArrayList<String>();
    int len = input == null ? 0 : input.length();
    for (int i = 0; i < len - 1; i++) {
        for (int j = i + 1; j < len; j++) {
            String combination = String.valueOf(input.charAt(i))
                    + input.charAt(j);
            System.out.println("adding: " + combination);
            result.add(combination);
        }
    }
    return result;
}

getCombinations("ABCDE");生成

adding: AB
adding: AC
adding: AD
adding: AE
adding: BC
adding: BD
adding: BE
adding: CD
adding: CE
adding: DE

【讨论】:

    【解决方案2】:

    没有 API。最好的阅读来源是 Knuth “The Art of Computer Programming Vol 1”或类似的内容:

    http://webhome.csc.uvic.ca/~haron/CoolCocoon.pdf

    【讨论】:

      【解决方案3】:

      i+1伪代码:

          String alphabet = "ABCDE";
          for( int i = 0; i < alphabet.getLength(); i++){
           for( int j = alphabet.getLength(); j > i; j--){
             System.out.println( alphabet.substring(i, i+1) + alphabet.substring(j, j+1) );
           }
          }
      

      如果您需要更多组合,例如: 文学学士 加州 依此类推,因为只有 2 个字母,您可以切换它们的位置并将此过程的结果附加到生成的对中。如果您需要三个等的组合,请查看置换算法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-22
        • 1970-01-01
        • 2019-11-26
        • 1970-01-01
        相关资源
        最近更新 更多