0

这个问题对某些人来说可能看起来很基本,但我一直在分析和剖析这段代码,但没有成功,因为 Robert Sedgewick 的这个排列程序如何在 perm1 和 perm2 方法中不使用 system.out.print 打印单词或字符的组合。非常感谢对假人的任何帮助或解释。先感谢您。

这是链接下的代码:

public class Permutations {
  // print N! permutation of the characters of the string s (in order)
  public  static void perm1(String s) { perm1("", s); }
  private static void perm1(String prefix, String s) {
      int N = s.length();
      if (N == 0) System.out.println(prefix);
      else {
          for (int i = 0; i < N; i++)
             perm1(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, N));
      }
  }
  // print N! permutation of the elements of array a (not in order)
  public static void perm2(String s) {
     int N = s.length();
     char[] a = new char[N];
     for (int i = 0; i < N; i++)
         a[i] = s.charAt(i);
     perm2(a, N);
  }

  private static void perm2(char[] a, int n) {
      if (n == 1) {
          System.out.println(a);
          return;
      }
      for (int i = 0; i < n; i++) {
          swap(a, i, n-1);
          perm2(a, n-1);
          swap(a, i, n-1);
      }
  }  

  // swap the characters at indices i and j
  private static void swap(char[] a, int i, int j) {
      char c;
      c = a[i]; a[i] = a[j]; a[j] = c;
  }

  public static void main(String[] args) {
     int N = Integer.parseInt(args[0]);
     String alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
     String elements = alphabet.substring(0, N);
     perm1(elements);
     System.out.println();
     perm2(elements);
  }
}
4

1 回答 1

2

它就在那里:

if (N == 0) System.out.println(prefix);

System.out.print并且System.out.println基本相同,除了后者在文本后打印一个换行符。

于 2012-08-26T11:11:10.193 回答