例如,字符串“25482”,
如果按1组来分需要得到如下结果:
x25482
如果按2组来分得到如下结果:
x2548x2,
x254x82,
x25x482,
x2x5482
如果按3组来分需要得到如下结果:
x254x8x2,
x25x4x82,
x25x48x2,
x2x5x482,
x2x45,x82,
x2x548x2
不能乱序。

解决方案 »

  1.   

    根据字符串的长度,for循环应该可以出来的..
      

  2.   

    简单的二叉树遍历算法咯。换个角度考虑,例如要分三组,过程上就是先分成两组,再把第二组分成两组。无论分成几组都可以,因为1+1=2 1+2=3,三生万物。所有的可能性列出就是答案了。写法上应该是用递归,函数基本上SubString就够用了
      

  3.   

        static public Collection<string> Divid(string S, int Count)
        {
          //S: 要分的字符串;
          //Count: 要分的组数
          if (Count < 1 || Count > S.Length)
            return null;
          Collection<string> Result = new Collection<string>();
          if (Count == 1)
          {
            Result.Add("x" + S);
            return Result;
          }
          int L = S.Length;
          int[] Pos = new int[Count + 1]; // 'x' 插入的位置,多加一个位置以便编程
          for (int i = 0; i < Count; i++)
            Pos[i] = i;
          Pos[Count] = L;
          for (; ; )
          {
            string R = "";
            for (int i = 0; i < Count; i++)
              R += "x" + S.Substring(Pos[i], Pos[i + 1] - Pos[i]);
            Result.Add(R);
            for (int i = 1; i < Count; i++) //检查有没有可以往后移动的
            {
              if (Pos[i + 1] - Pos[i] >= 2)
              { //有
                Pos[i]++;
                for(int j = 1; j<i; j++)  //这两行是新增加的
                  Pos[j] = j;             //
                goto hesNext; //跳转到外层循环的Continue前面继续循环;
              }
            }
            break; //没有了
          hesNext: continue;
          }
          return Result;
        }
      

  4.   

    本帖最后由 caozhy 于 2012-05-14 13:21:26 编辑