按空格生成所有字符串组合

时间:2017-11-16 07:20:05

标签: java recursion combinations permutation

说我有一个字符串A B C D - 我希望最终得到List<List<String>>,其中包含以下组合:

[A,B,D,C]
[A,B C D]
[A B, C D]
[A B C, D]
[A, B C, D]
etc...

发现了大量已回答的类似请求的问题,其中人们根据单个字符串的子字符串要求所有组合,但无法根据我的需要进行调整。

我非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

您可以尝试通过递归来完成。 左右两个字符串。将最右边的字符移到右边的字符串,重复,直到左边的字符串中只有1个字符。每次执行此操作时,请将相同的功能应用于正确的字符串。

所以如果你有&#34; ABCD&#34;,那就会给你:

MyClaimsPrincipal

完全消耗你得到:

"ABCD"
"ABC" f("D")
"AB" f("CD")
"A" f("BCD")

给你:

f("ABCD") {
    "ABCD"
    "ABC" f("D")
        f("D") {
            "D"
        }
    "AB" f("CD")
        f("CD") {
            "CD"
            "C" f("D")
                f("D") {
                    "D"
                }
        }
    "A" f("BCD")
        f("BCD") {
            "BCD"
            "BC" f("D")
                f("D") {
                    "D"
                }
            "B" f("CD")
                f("CD") {
                    "CD"
                    "C" f("D")
                        f("D") {
                            "D"
                        }
                }
        }
}

答案 1 :(得分:0)

请注意,插入逗号有N-1个位置。所以有2个 n-1 的放置变体,我们可以使用范围0..2 n-1 -1在循环中遍历所有数字并得到相应的组合。

例如,值5 = 101 binary 对应于第一个和最后一个位置的逗号(根据设置位),因此组合为[A, B C, D]