【发布时间】:2021-07-19 16:43:37
【问题描述】:
比如有一行
String str = "program";
需要得到所有可能的组合,如:
- p-r-o-g-r-a-m
- p-r-o-g-r-am
- p-r-o-g-ra-m
- pro-og-r-am
等等。
我如何在 Java 中做到这一点?或者至少告诉我一个通用算法(举例)?
打破最后期限不是问题,一次至少一个字符,至少两个,例如
for (int i = 0; i <str.length () - 1; i = i +2) {
String strTemp = str.charAt (i) + "" + str.charAt (i + 1);
System.out.println (strTemp);
}
但是如何获取(绕过)1和2的所有可能组合,目前还不清楚如何编程。
【问题讨论】:
-
抛出一些想法:每个字母都有“配对”或“未配对”的状态。更进一步,我们有一个布尔值 1/0 表示每个字母的“配对”。接下来想象一个计数器,它从全 0(每个字母 0)一直到全 1(每个字母 1)。
-
我不会像@LukeBriggs 建议的那样考虑配对的字母,而是处理字母之间的间隙。它们可以配对或不配对。两个相邻的间隙可能不会同时配对。递归方法可能是枚举所有可能性的最简单方法。
-
是的,“dash”与“no dash”是一个更简单的概念。重新阅读问题,实际上似乎没有必要将他们限制在两人中。也就是说,
progr-am似乎也是有效的,因此它可以只是一个代表破折号状态的直接计数器。 -
不,“progr-am”无效。每个部分正好 1 或 2 个字母