【问题标题】:Permutation of more than one string of different lengths in java?java中多个不同长度的字符串的排列?
【发布时间】:2019-03-07 13:44:08
【问题描述】:
string1 = "ABC" 
string2 = "DEF" 
string3 = "GHIJ"

输出:“ADG”、“ADH”、“ADI”、“ADJ”、“AEG”、“AEH”、“AEI”、“AEJ”、“AFG”、“AFH”、“AFI”、“ AFJ" b 和 c 的方式相同 使用递归方法会很有帮助..

【问题讨论】:

  • 显示你的尝试
  • 如果你知道如何嵌套循环,你就解决了问题

标签: java string permutation permute


【解决方案1】:

此方法不使用递归,但在我看来,它是生成所需排列的最简单方法。

static void permute(String... str)
{    
  char[][] chars = new char[str.length][];
  for(int i=0; i<str.length; i++)
    chars[i] = str[i].toCharArray();

  int[] idx = new int[str.length];

  char[] perm = new char[str.length];    
  for(int i=0; i<str.length; i++)
    perm[i] = chars[i][0];

  while(true)
  {      
    System.out.println(new String(perm));

    int k=str.length-1;
    for(; k>=0; k--)
    {
      idx[k] += 1;
      if(idx[k] < chars[k].length) 
      {
        perm[k] = chars[k][idx[k]];
        break;
      }
      idx[k] = 0;
      perm[k] = chars[k][idx[k]];
    }
    if(k < 0) break;
  }
}

测试:

public static void main(String[] args)
{
  permute("ABC", "DEF", "GHIJ");
}

输出:

ADG
ADH
ADI
ADJ
AEG
AEH
AEI
<snip>
CFG
CFH
CFI
CFJ

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 2022-11-16
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2012-12-23
    相关资源
    最近更新 更多