博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 排列组合代码类
阅读量:5236 次
发布时间:2019-06-14

本文共 5329 字,大约阅读时间需要 17 分钟。

///         /// 排列组件算法类        ///         /// 
public class PermutationAndCombination
{ ///
/// 交换两个变量 /// ///
变量1 ///
变量2 public static void Swap(ref T a, ref T b) { T temp = a; a = b; b = temp; } ///
/// 递归算法求数组的组合(私有成员) /// ///
返回的范型 ///
所求数组 ///
辅助变量 ///
辅助变量 ///
辅助数组 ///
辅助变量M private static void GetCombination(ref List
list, T[] t, int n, int m, int[] b, int M) { for (int i = n; i >= m; i--) { b[m - 1] = i - 1; if (m > 1) { GetCombination(ref list, t, i - 1, m - 1, b, M); } else { if (list == null) { list = new List
(); } T[] temp = new T[M]; for (int j = 0; j < b.Length; j++) { temp[j] = t[b[j]]; } list.Add(temp); } } } ///
/// 递归算法求排列(私有成员) /// ///
返回的列表 ///
所求数组 ///
起始标号 ///
结束标号 private static void GetPermutation(ref List
list, T[] t, int startIndex, int endIndex) { if (startIndex == endIndex) { if (list == null) { list = new List
(); } T[] temp = new T[t.Length]; t.CopyTo(temp, 0); list.Add(temp); } else { for (int i = startIndex; i <= endIndex; i++) { Swap(ref t[startIndex], ref t[i]); GetPermutation(ref list, t, startIndex + 1, endIndex); Swap(ref t[startIndex], ref t[i]); } } } ///
/// 求从起始标号到结束标号的排列,其余元素不变 /// ///
所求数组 ///
起始标号 ///
结束标号 ///
从起始标号到结束标号排列的范型
public static List
GetPermutation(T[] t, int startIndex, int endIndex) { if (startIndex < 0 || endIndex > t.Length - 1) { return null; } List
list = new List
(); GetPermutation(ref list, t, startIndex, endIndex); return list; } ///
/// 返回数组所有元素的全排列 /// ///
所求数组 ///
全排列的范型
public static List
GetPermutation(T[] t) { return GetPermutation(t, 0, t.Length - 1); } ///
/// 求数组中n个元素的排列 /// ///
所求数组 ///
元素个数 ///
数组中n个元素的排列
public static List
GetPermutation(T[] t, int n) { if (n > t.Length) { return null; } List
list = new List
(); List
c = GetCombination(t, n); for (int i = 0; i < c.Count; i++) { List
l = new List
(); GetPermutation(ref l, c[i], 0, n - 1); list.AddRange(l); } return list; } ///
/// 求数组中n个元素的组合 /// ///
所求数组 ///
元素个数 ///
数组中n个元素的组合的范型
public static List
GetCombination(T[] t, int n) { if (t.Length < n) { return null; } int[] temp = new int[n]; List
list = new List
(); GetCombination(ref list, t, t.Length, n, temp, n); return list; } }

枚举出键盘所有组合键代码:

var combinePrefixKeyList = new Keys[] { Keys.Control, Keys.Alt, Keys.Shift };            var result = new List
>(); for(var i =1 ;i <= combinePrefixKeyList.Count() ;i++) { var combinationList = PermutationAndCombination
.GetCombination(combinePrefixKeyList, i); var items = combinationList.Select(item => item.ToList()).ToList(); result.AddRange(items); } var keyNames = Enum.GetNames(typeof(Keys)).ToList(); foreach (var keyName in keyNames) KeyList.Add(keyName, (Keys)Enum.Parse(typeof(Keys), keyName)); var combineKeyList = (from item in result join key in KeyList.Select(k => k.Value).Except(new List
{ Keys.None }) on true equals true select item.Concat
(new List
{ key }) ).ToList(); Func
, int> GetCombinedKeyCode = null; GetCombinedKeyCode = delegate(List
args) { if (args.Count == 0) return 0; if (args.Count == 1) return args[0]; return args[0] | GetCombinedKeyCode(args.Skip(1).ToList()); }; Func
GetVirtualKeyCode = delegate(int args) { return (byte)(args & 0xFF); }; foreach (var item in combineKeyList) { var names = item.Select(key => Enum.GetName(typeof(Keys), key)); var keyCombination = string.Join("+", names); Debug.Print(keyCombination + ":\t" + GetVirtualKeyCode(GetCombinedKeyCode(item.Cast
().ToList())).ToString()); }

 

转载于:https://www.cnblogs.com/nanfei/p/10923462.html

你可能感兴趣的文章
MySQL简介
查看>>
设计模式之桥接模式(Bridge)
查看>>
jquery的$(document).ready()和onload的加载顺序
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
【codevs1033】 蚯蚓的游戏问题
查看>>
【程序执行原理】
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>
PHP 导出 Excell
查看>>
Java基础教程——网络基础知识
查看>>
自己到底要的是什么
查看>>
Kruskal基础最小生成树
查看>>
ubuntu 14.04 安装搜狗拼音输入法
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>