怎么算总数没有。使用c#的字符串的可能组合?

时间:2012-01-29 03:36:40

标签: c# string algorithm

我想解决一个我有这个输入的算法:

  

n = 30且st = 1234321

现在我想知道使用字符串可以形成多少组合,即 它可以有

  

(1 2 3 4 2 1)
  (1 23 4 3 2 1)
  (1 2 3 4 3 21
  ( 12 3 4 3 2 1)
  ( 12 3 4 3 21
  (1 23 4 3 21

即。全部少于30.所以总的组合将是6。

但是,当我们单独存在0或像09那样领先时,我们会将字符串计算在内。

以案例为例:n = 70,st = 8675309.现在我们有:

  

(8 6 7 5 3 0 9)
  (8 67 5 3 0 9)
  (8 6 7 53 0 9)
  (8 6 7 5 30 9)
  (8 6 7 5 3 09
  (8 67 53 0 9)
  (8 67 5 30 9)
  (8 67 5 3 09

这里的计数总数仅为2(如果我们单独存在0或像09那样领先,我们不计算。)

请建议我使用c#代码查找此类组合。

3 个答案:

答案 0 :(得分:4)

您可以将空间建模为二叉树:在n级别,左子项加入列表中的nn+1个数字,以及正确的子项没有。使用受约束非法的DFS和剪枝,然后计算叶节点。

答案 1 :(得分:0)

Here is a link到C#中字符串排列类的教程和代码。我不打算将你的号码转换成这段代码,因为它很直接。

祝你好运!

答案 2 :(得分:0)

这是一个简单的问题,唯一独特的部分是你需要计算所有子字符串值并获得唯一值,然后找到所有组合,然后加起来小于60.

1) Get all unique sub string values
2) Get all permutations for these values
3) then remove any that add up to be over 60
4) do step 2 again

讨论了步骤2到4 here

与使用树相比,性能会稍微下降,但对于小长度的起始字符串则不会很大。