计算排列组合情况C#
参考大佬的
上代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CalculateNumberCombinations : MonoBehaviour
{
private static string[] m_Data = { "1", "2", "3", "4", "5", "6", "7" ,"8","9","10","11"};
private void Awake()
{
Dictionary<string, int> dic = new Dictionary<string, int>();
for (int i = 0; i < m_Data.Length; i++)
{
//Debug.Log(m_Data[i]);//如果不需要打印单元素的组合,将此句注释掉
dic.Add(m_Data[i], i);
}
GetString(dic);
string temp = "1,2,3,4,5,6,7,8,9,10,11,12";
ArrayList result_list = comb(temp, "0");
string r = "";
for (int w = 0; w < result_list.Count; w++)
{
if (result_list[w].ToString().Split(',').Length==4)
r = r + result_list[w].ToString() + "\n";
}
Debug.LogError(r);
}
private static void GetString(Dictionary<string, int> dd)
{
Dictionary<string, int> dic = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> kv in dd)
{
for (int i = kv.Value + 1; i < m_Data.Length; i++)
{
Debug.Log(kv.Key +"-"+ m_Data[i]);
dic.Add(kv.Key + "-" + m_Data[i], i);
}
}
if (dic.Count > 0)
{
GetString(dic);
}
}
private ArrayList comb(string leave, string now)
{
string before1 = now;
if (now != "0")
{
if (leave != "")
{
ArrayList sava_lists = new ArrayList();
string[] partition = leave.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < partition.Length; i++)
{
string leavel = "";
for (int k = i + 1; k < partition.Length; k++)
{
if (k == partition.Length)
{
leavel = "";
break;
}
leavel = leavel + partition[k].ToString() + ",";
}
ArrayList list = comb(leavel, partition[i]);
for (int q = 0; q < list.Count; q++)
{
sava_lists.Add(before1 + "," + list[q].ToString());
}
}
sava_lists.Add(before1 + ",");
return sava_lists;
}
else
{
ArrayList a = new ArrayList();
a.Add(before1 + ",");
return a;
}
}
else
{
ArrayList sava_lists = new ArrayList();
string[] partition = leave.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < partition.Length; i++)
{
string leavel = "";
for (int k = i + 1; k < partition.Length; k++)
{
if (k == partition.Length)
{
leavel = "";
break;
}
leavel = leavel + partition[k].ToString() + ",";
}
ArrayList list = comb(leavel, partition[i]);
for (int q = 0; q < list.Count; q++)
{
sava_lists.Add(list[q].ToString());
}
}
return sava_lists;
}
}
}