使用for循环的字符串排列

时间:2013-05-01 09:11:45

标签: java for-loop permutation

我必须打印给定输入字符串的所有可能的排列。

使用下面的代码我现在在下一次迭代中获得aaaa bbb ccc我要打印aaa aab aacaba aca等等。请指导我。

String s = "abc";
char ch;
ArrayList<Character> input = new ArrayList<Character>();

public static void main (String [] args)
{
  String  s= "abc";
  int count ; 
  char ch;
  ArrayList<Character> input = new ArrayList<Character>();
  for (int i=0; i < s.length(); i++)
  {
    ch = s.charAt(i);
    input.add(ch);         
  }       


  for (int i=0; i <= input.size(); i++)
  {
    for(int j=0; j < input.size(); j++)
    {
      System.out.print(input.get(i));
    } 
    System.out.println();
  } 
}

3 个答案:

答案 0 :(得分:3)

您可以使用递归功能。实施例

private static String text = "abcd";

public static void main(String[] args) {
    loopPattern(text, 0, "");
}

private static void loopPattern(String source, int index, String res) {
    if (source == null || source.length() == 0) {
    return;
    }
    if (index == source.length()) {
        System.out.println(res);
        return;
    }
    for (int i = 0; i < source.length(); i++) {
        loopPattern(source, index + 1, res + source.charAt(i));
    }
}

答案 1 :(得分:2)

在当前实现中,您应该使用:

for (int i=0; i <= input.size(); i++) {
   for(int j=0; j < input.size(); j++) {
      for(int k=0; k < input.size(); k++) {
         System.out.print(input.get(i));
         System.out.print(input.get(j));
         System.out.print(input.get(k));
         System.out.println();
      }
   }
}

但恕我直言,最好使用s.charAt(i)代替input.get(i)

答案 2 :(得分:2)

递归版本,不依赖于字符数:

class Test
{
    public static void main(String[] args)
    {
        if(args.length != 1)
        {
            System.out.println("Usage: java Test <string>");
            System.exit(1);
        }

        String input = args[0];

        iterate(input, "", input.length());
    }

    public static void iterate(String input, String current, int level)
    {
        if(level == 0)
        {
            System.out.println(current);
            return;
        }

        for(int i=0; i < input.length(); i++)
        {
            iterate(input, current + input.charAt(i), level-1);
        }
    }
相关问题