计算排列组合情况C#

计算排列组合情况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;
        }
    }
}

输出

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值