字符串递归函数的置换

时间:2019-06-03 09:03:07

标签: java recursion

我目前正在尝试接收字符串的所有置换,我不理解示例

我不了解groups()的底层调用,以及for循环如何影响递归调用

public static void combinations(String s, int length) {
    Set<String> all = new TreeSet<String>();
    combinations(s, "", all, length);
    for (String comb : all) {
        System.out.println(comb);
    }
}

private static void combinations(String s, String chosen,Set<String> all, int length) {
    if (length == 0) {
        all.add(chosen);         // base case: no choices left
    } else {
        for (int i = 0; i < s.length(); i++) {
            String ch = s.substring(i, i + 1);
            if (!chosen.contains(ch)) {
                String rest = s.substring(0, i) + s.substring(i + 1);
                combinations(rest, chosen + ch, all, length - 1);
            }
        }
    }
}

举一个这样的呼叫示例:

public static void main(String[] args){
    combinations("sad", 3);
}

输出应为:

广告 阿斯 达斯 dsa 伤心 sda

0 个答案:

没有答案