zoukankan      html  css  js  c++  java
  • 排列组合算法

    给出任意几个字符,列出所有的排列组合。
    方法一:
            public static List<List<string>> zuhe(List<string> arr)
            {
                List<List<string>> rtn;
                if (arr.Count == 1)
                {
                    rtn = new List<List<string>>(1);
                    rtn.Add(arr);
                    return rtn;
               }
                rtn = new List<List<string>>();
                for (int i = 0; i < arr.Count; i++)
                {
                    List<string> tmp = new List<string>(arr.Count);
                    tmp.AddRange(arr);
                    string prefix = tmp[i];
                    tmp.RemoveAt(i);
                    List<List<string>> temp = zuhe(tmp);
                    for (int j = 0; j < temp.Count; j++)
                        temp[j].Insert(0, prefix);
                    rtn.AddRange(temp);
                }
                return rtn;
            }
    方法二:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    using System.IO;

    namespace Date1219
    {
      class NumArrangement
     {

            /**//// <summary>
            /// 实现任意输入字符串的全排列
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public ArrayList Arrange(string str)
         {
                ArrayList list = new ArrayList();
                for (int i = 0; i < str.Length; i++)
                {
                    list = InsertValue(str[i].ToString(), list);
                }
                return list;
            }

            public ArrayList InsertValue(string str, ArrayList list)
      {
                int rowct = list.Count;
                int rayct;

                ArrayList list2 = new ArrayList();
                if (list.Count >0)
                {
                    ArrayList temp = (ArrayList)list[0];
                    rayct = temp.Count;
                    for (int i = 0; i < rowct; i++)
                    {
                        for (int j = 0; j < rayct+1; j++)
                        {
                            ArrayList list4 = new ArrayList((ArrayList)list[i]);//Arraylist 的深度复制                  
                            list4.Insert(j, str);
                            list2.Add(list4);
                        }
                    }
                }
                else
               {
                     rayct = 0;
                     list.Add(str);
                     list2.Add(list);
                }          
                return list2;
            }

            //打印
            public void PrintList(ArrayList list)
            {
                for (int i = 0; i < list.Count; i++)
               {
                    ArrayList list2 = (ArrayList)list[i];
                    for (int j = 0; j < list2.Count; j++)
                   {
                        Console.Write(list2[j] + " ");
                    }
                    Console.WriteLine();
                }
                Console.ReadLine();
            }
        }

        class Test
        {
            public static void Main(String[] args)
           {
                NumArrangement na = new NumArrangement();
                //交互界面
                Console.WriteLine("Input your Num:");
                string input = Console.ReadLine();
                Console.WriteLine("Your Number Arrangement:");
                ArrayList list = na.Arrange(input);
                na.PrintList(list);        
            }
        }
    }
  • 相关阅读:
    ASP.NET中的状态保持(转载)
    Win7系统下VS2008安装SP1补丁解决JQuery无智能提示的问题
    合并多个List<T>类型并通过LINQ按指定属性排序
    ASP.NET状态保持:ViewState
    第一部分 CLR基础:第1章 CLR的执行模型
    Oracle存储过程知识汇总
    ASP.NET中Button控件的CommandName和CommandArgument属性用法
    PL/SQL Developer使用
    ASP.NET常用代码汇总
    PL/SQL Developer中文注释乱码的解决办法
  • 原文地址:https://www.cnblogs.com/mad/p/1233642.html
Copyright © 2011-2022 走看看