有谁能告诉我如何解决这个问题?
我有一个字符串,其中包含一些值 “{1,2,3}”每个数字用逗号分隔 现在使用该字符串我需要生成一个新字符串...新字符串应该是这样的 “{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}”
这很容易做到,但我无法弄清楚如何使它与算法一起工作 任何人都可以解释我应该做些什么吗?
我不想要代码,只是解释如何做到这一点。 我在想递归...但我想不出办法
答案 0 :(得分:2)
首先,你需要迭代整数0到N,其中N是字符串中的值的数量(让我们称之为迭代变量i
)。对于每个i
,您将在输入中生成包含i
个N
个数字的所有集合。
例如,i == 0
将生成{}
,i == 1
将生成{1},{2},{3}
等。
现在让我们假设i
的值是固定的;这将让我们继续了解如何为每个迭代做些什么。显然我们需要某种嵌套循环,因为我们将为i
的每个值生成多个(在一般情况下)输出值(例如,我们将在i == 1
时生成3个集合,如图所示更早)。
这被称为{em>生成i
N
个{{1}}个项目的组合,并且有大量可用的文档。例如,请参阅Algorithm to return all combinations of k elements from n。
答案 1 :(得分:0)
对于替代方法,将问题视为二进制问题。你的集合有三个元素,所以你需要三个二进制数字。集合中的每个成员可以在结果中存在(1
)或不存在(0
)。因此,您可以将所需结果映射到三位二进制数字:
000 -> {}
001 -> {3}
010 -> {2}
011 -> {2, 3}
100 -> {1}
101 -> {1, 3}
110 -> {1, 2}
111 -> {1, 2, 3}
生成从0(000
)到7(111
)的数字并从中提取所需的组合并不困难。