【问题标题】:Generate all combinations of string by space按空格生成字符串的所有组合
【发布时间】:2017-11-16 07:20:04
【问题描述】:

假设我有一个字符串 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...

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

非常感谢您的帮助!

【问题讨论】:

标签: java recursion combinations permutation


【解决方案1】:

您可以尝试通过递归来实现。 有 2 个字符串,左右。将最右边的字符移到右边的字符串,重复直到左边的字符串中只有 1 个字符。每次这样做时,将相同的函数应用于正确的字符串。

所以如果你有“ABCD”,那就给你:

"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"
                        }
                }
        }
}

给你:

[["ABCD"], 
["ABC", "D"], 
["AB", "CD"], 
["AB", "C", "D"], 
["A", "BCD"], 
["A", "BC", "D"], 
["A", "B", "CD"], 
["A", "B", "C", "D"]]

【讨论】:

    【解决方案2】:

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

    例如value 5=101binary对应首尾逗号(根据设置位),所以组合为[A, B C, D]

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多