zoukankan      html  css  js  c++  java
  • 穷举所有排列情况算法实现

    现实问题:测试多个参数不同的组合情况对结果的影响

    算法示例:

    输入: A,B,C,D

    输出:

    A

    A,B

    A,B,C

    A,B,C,D

    A,C

    A,C,D

    A,D

    B

    B,C

    B,C,D

    B,D

    C

    C,D

    D

    算法实现逻辑:

    对于每个元素来说,所做的工作就是要找到该元素能够组合的情况,所以这里直接递归寻找每个元素的组合。

    由于这里不需要加上排列条件,按顺序从前往后找就不会有重复的情况了。

    代码:

    static void Main(string[] args)
    {
      var xcolnames = new List < string > { "A", "B", "C", "D"};
      var paramGroup = new List<string>();
      for (var i = 0; i < xcolnames.Count; i++) {
        paramGroup.Add(xcolnames[i]);
        Console.WriteLine(xcolnames[i]);
        FindPartner(i, new List<string>(), xcolnames, ref paramGroup);
      }
    }
    private static void FindPartner(int self, List<string> head, List<string> data, ref List<string> result)
    {
      for (var i = self + 1; i < data.Count; i++) {
        //找到就加入并输出
        var cresult = new List<string>(head.ToArray());
        cresult.Add(data[self]);
        cresult.Add(data[i]);
    
        result.Add(string.Join("+", cresult));
        Console.WriteLine(string.Join("+", cresult));
    
        //克隆之前的搭档
        var headclone = new List<string>(head.ToArray());
        headclone.Add(data[self]);
        FindPartner(i, headclone, data, ref result);
      }
    }
    

      

  • 相关阅读:
    js检测对象是否是数组的三种方法
    mongdb查询数据并且返回数据条数
    mongdb数据库的操作
    NodeJs运行服务器-day01
    html5新增的定时器requestAnimationFrame
    vue 中scroll事件不触发问题
    Node.js快速生成26个字母
    Node.js fs文件系统模块
    Node.js 创建server服务器
    JavaScript exec()方法
  • 原文地址:https://www.cnblogs.com/lycnblogs/p/9111565.html
Copyright © 2011-2022 走看看