【问题标题】:Java - Can anyone explain this permutation code for me?Java - 任何人都可以为我解释这个排列代码吗?
【发布时间】:2017-02-01 15:55:02
【问题描述】:
public  static void perm(String str) { 
   perm1(str,"");
}

private static void perm1(String str, String prefix) {
    int n = str.length();

    if (n == 0) StdOut.println(prefix);
    else {
        for (int i = 0; i < n; i++){
           String rem = str.substring(0,i) + str.substring(i+1);
           perm1(rem, prefix + str.charAt(i));
        }
    }
}

例如,如果我们的情况是“abc”.. 在代码中,这个字符串的长度是在哪里减少以便我们最终达到基本情况?我看到我们总是让 rem 因为它是“abc”..我错过了什么?

【问题讨论】:

  • perm1 以rem 作为第一个参数被递归调用,其中rem 比str 短一个字符。
  • 它可以烫发你的头发。至少这是界面所暗示的。

标签: java recursion permutation


【解决方案1】:

关键是 substring(int beginIndex, int endIndex) 方法将子字符串 排他地 用于 endIndex。因此,例如对于 i = 1,您将得到:

String str = "abc";
String s1 = str.substring(0, 1); // a
String s2 = str.substring(1 + 1); // c
String rem = s1 + s2; // ac

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-29
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多