程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 代碼-用遞歸能實現一個數組劃分的算法麼?

代碼-用遞歸能實現一個數組劃分的算法麼?

編輯:編程綜合問答
用遞歸能實現一個數組劃分的算法麼?

用遞歸能實現一個數組劃分的算法麼?

給一個數組,長度為m,劃分成n個子數組(每個數組起碼有一個元素),比如
{1 2 3 4 5}劃分成2個:
1, 2345 12,345 123,45 1234,5一共5個分法
{1234}分成3個
1,2,34 1,23,4 12,3,4,一共3個分法
求代碼怎麼寫

最佳回答:


 IEnumerable<IEnumerable<IEnumerable<int>>> Split(IEnumerable<int> source, int n)
{
  int[] splitter = Enumerable.Range(1, n - 1).ToArray();
  splitter[n - 2]--;
  int[] lastsp = Enumerable.Range(source.Count() - n, n -1).ToArray();
  while (splitter.Zip(lastsp, (x, y) => x != y).Any(x => x == true))
  {
    for (int i = n - 2; i >= 0; i--)
    {
      if (splitter[i] < lastsp[i])
      {
        splitter[i]++;
        for (int j = i + 1; j < n - 1; j++)
        {
          splitter[j] = splitter[i] + j - i;
        }
        break;
      }
    }
    IEnumerable<int>[] result = new IEnumerable<int>[n];
    int acc = 0;
    for (int i = 0; i < n; i++)
    {
      if (i == n - 1)
      {
        result[i] = source.Skip(acc);
      }
      else
      {
        result[i] = source.Skip(acc).Take(splitter[i] - acc);
        acc = splitter[i];
      }
    }
    yield return result;
  }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved