Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace PermAndComb
- {
- class Program
- {
- static void Main(string[] args)
- {
- string s = "abcd";
- Permutation(s);
- Console.ReadKey();
- }
- public static void Permutation(string s)
- {
- int len = s.Length;
- char [] inStr = s.ToCharArray();
- StringBuilder outStr = new StringBuilder();
- bool[] used = new bool[len];
- doPermute(inStr, outStr,used, len, 0);
- }
- public static void doPermute(char[] instr, StringBuilder outStr,bool [] used, int len, int level)
- {
- if (level == len)
- {
- Console.WriteLine(outStr.ToString());
- return;
- }
- for (int i = 0; i < len; i++)
- {
- if (used[i]) continue;
- outStr.Append(instr[i]);
- used[i] = true;
- doPermute(instr, outStr, used, len, level + 1);
- used[i] = false;
- outStr.Length = outStr.Length - 1;
- }
- }
- }
- }
- string str = "abcd";
- Func<int, int> factorial = n =>
- Enumerable.Range(1, n)
- .Aggregate((i, j) => i * j);
- Func<int, int[]> tofactoradic = n =>
- Enumerable.Range(1, n)
- .Reverse()
- .Select(i => { var m = n; n /= i; return m % i; })
- .ToArray();
- Func<int[], string, string> Apply = (f, s) => {
- var chars = s.ToList();
- var result = "";
- for (int i = 0; i < s.Length; i++) {
- result += chars[f[i]];
- chars.RemoveAt(f[i]);
- }
- return result;
- };
- int max = factorial(str.Length);
- for (int i = 0; i < max; i++ ) {
- var f = tofactoradic(i);
- Console.WriteLine(Apply(f, str));
- }
Add Comment
Please, Sign In to add comment