在连续编号配对后打印一组的所有组合

时间:2015-04-09 07:52:19

标签: algorithm

问题是这样的,给定一组数字,我们必须写一个递归程序,在连续数字配对后打印所有可能的组合或将它们保持单一。


<div>
Ex set 1,2,3,4,5,6
Output
<ul>
  <li>1,2,3,4,5,6</li>

  <li>12,3,4,5,6</li>
  <li>1,23,4,5,6</li>
  <li>1,2,34,5,6</li>
  <li>1,2,3,45,6</li>
  <li>1,2,3,4,56</li>

  <li>12,34,5,6</li>
  <li>12,3,45,6</li>
  <li>12,3,4,56</li>
  <li>1,23,45,6</li>
  <li>1,23,4,56</li>
  <li>1,2,34,56</li>

  <li>12,34,56</li>
</div>

1 个答案:

答案 0 :(得分:0)

我用c ++编写代码。

假设给定集合是(a [0],a [1],...,a [n - 1]),并且a的长度是n 并且当前答案保存在b

void dfs(int pos, int depth)
{
    if(pos >= n)
        for(int i = 0; i < depth; ++i)
             printf("%d%c", b[i], i == depth - 1 ? '\n' : ',');
    else
    {
        b[depth] = a[pos];
        dfs(pos + 1, depth + 1);
        if(pos + 1 < n)
        {
             int c = 1, x = a[pos];
             while(x) c *= 10, x /= 10;
             b[depth] = a[pos] * c + a[pos + 1];
             dfs(pos + 2, depth + 1);
        }
    }
}