假设你有字符串:1234
我需要的是从此字符串生成所有可能的数字组合,但必须保持字符串的原始顺序。
每个结果中也必须至少2个数字。
在1234的情况下,输出将是列表列表
输出列表:
list: 1, 2, 3, 4
list: 12, 3, 4
list: 123, 4 --Note a list containing only 1234 is not valid
list: 1, 23, 4
list: 1, 234
list: 1, 2, 34
list: 12, 34
另请注意,每个结果列表中的数字始终与原始字符串1234的顺序相同。因此,组合34,21或213,4的列表无效。
我能想到的唯一方法:
然而,根据我的方法,我不知道如何生成12,34组合
非常感谢任何帮助!
答案 0 :(得分:5)
1 | 2 | 3 | 4 | 5
| | | |
d1 d2 d3 d4
假设原点字符串的长度为5,我们通过添加一个可以为空的分隔符d1,d2,d3和d4来划分该字符串。
12345
。1, 2345
1,2,3,4,5
对于我们添加的每个分隔符,它有两个选项:可见或已消失,
因此,当n是原始字符串的长度时,总可能的计数为2^(n-1) - 1
然后,我们要解决的下一个问题是迭代所有可能性: 使用二进制值来表示分隔符:
for (int i = 1; i <= pow(2, n - 1); i++) {
// i = 1, 0b0001, d4 is visible, we get 1234,5
// i = 2, 0b0010, d3 is visible, we get 123,45
// i = 3, 0b0011, d3 and d4 is visible, we get 123,4,5
// i = 4, 0b0100, d2 is visible, we get 12,345
// i = 5, 0b0101, d2 and d4 is visible, we get 12, 34, 5
// i = 6, 0b0110, d2 and d3 is visible, we get 12, 3, 45
// i = 7, 0b0111, d2,d3,d4 is visible, we get 12,3,4,5
// go on...
}
希望帮助...
答案 1 :(得分:0)
您可以使用类似的方法来获得所需的输出。 修改它,因为它是简单的遍历。
String str="1234";
StringBuilder sb=new StringBuilder(str);
int l=str.length();
for(int i=0;i<l;i++){
int j=i+1;
if(i!=0)
j=i+2;
for(;j<l+1;j++){
sb.insert(j, ',');
System.out.println(sb);
sb.deleteCharAt(j);
}
sb=new StringBuilder(str);
sb.insert(i+1, ',');
}
它产生以下输出
1,234
12,34
123,4
1234,
1,2,34
1,23,4
12,3,4