我在网上找到了一个链接,该链接显示了一种算法来生成字符串的所有组合:http : //www.mytechinterviews.com/combinations-of-a-
string
算法复制如下。
void combine(String instr, StringBuffer outstr, int index)
{
for (int i = index; i < instr.length(); i++)
{
outstr.append(instr.charAt(i));
System.out.println(outstr);
combine(instr, outstr, i + 1);
outstr.deleteCharAt(outstr.length() - 1);
}
}
combine("abc", new StringBuffer(), 0);
我不明白的是这行:
outstr.deleteCharAt(outstr.length() - 1);
如果我删除此行,则该程序显然不再起作用,但是为什么首先需要这样做?我了解递归的想法,在这个想法中,我们改变了初始字符,然后对其余字符进行了递归,但是deleteChar行似乎在逻辑上不适合任何地方。添加outstr.deleteCharAt行的原因是什么?
呼叫outstr.deleteCharAt
计数器会outstr.append
删除的最后一个字符,以抵消的影响outstr
。
每个循环的迭代过程如下:
i+1
问题内容: 我已经看到了关于获取所有可能的子字符串(即相邻字符集)的许多问题,但是对于生成所有可能的字符串(包括其子字符串的组合)都没有疑问。 例如,让: 我希望输出是这样的: 要点是,我们可以删除原始字符串中不相邻的多个字符(以及相邻的字符)。 到目前为止,这是我尝试过的: 但是,这只会从原始字符串中删除相邻字符串的集合,而不会返回上例中的元素。 另一个示例是,如果我们使用字符串,则输出列表应包
问题内容: 从最小和最大长度值的给定数组中获取所有可能的字符串组合的最佳算法是什么? 注意:这增加了复杂性,因为值是可变的,与链接到的问题不同。 例如: 问题答案: 几乎是基本转换 此解决方案是出于以下观察的目的:如果不是为了在有效组合的高位位置重复数组索引0处的字符,则此问题将只是从十进制到新的基数的基数转换。从0到(base ^ length)-1的所有整数。所以, 困难在于,它会错过与一个或
问题内容: 找到字符串的所有排列的一种优雅方法是什么。例如,的排列会是和,但是较长的字符串呢?有任何实现示例吗? 问题答案:
问题内容: 我有一个项目{a,b,c,d}的列表,当我需要生成所有可能的组合时, 您可以选择任意数量的项目 顺序不重要(ab = ba) 空集不被考虑 如果我们抓住可能性,那就应该是 我使用了以下递归方法: 当数组大时,有没有更有效的方法? 问题答案: 将组合视为一个二进制序列,如果所有4个都存在,则得到1111,如果缺少第一个字母,则得到0111,依此类推。对于n个字母,我们将得到2 ^ n -
请求类元素被创建为JAXB元素,而不是String,我需要手动将其转换为String。 是否有任何方法我可以配置,使元素将被创建为字符串,而不是JAXB元素。
问题内容: String database[] = {‘a’, ‘b’, ‘c’}; 我想基于给定生成以下字符串序列。 我只能想到一个漂亮的“虚拟”解决方案。 解决方案非常愚蠢。从某种意义上说,它是不可扩展的 如果我增加的大小怎么办? 如果我最终的目标打印字符串长度必须为N怎么办? 是否有任何智能代码可以以一种非常智能的方式生成可缩放的排列和组合字符串? 问题答案: 您应该检查以下答案:在Java