从0到n的排列的一种求法

原创 2006年05月19日 00:20:00

从0到n的排列的一种求法(效率低,急需改进)

用到了split和backgroundWorker。textbox用来接收输入,lixtbox输出。button开始计算。

  private void button1_Click(object sender, EventArgs e)
        {
            int needtocal = int.Parse(textBox1.Text);
            backgroundWorker1.RunWorkerAsync(needtocal);

        }

        //计算
        public string CalPermutation(int n)
        {
            string result = "";
            if (n < 0) return "";
            if (n == 0)
            {
                result = "0";
            }
            else if (n == 1)
            {
                result = "01,10";
            }
            else
            {

                string last = CalPermutation(n - 1);
                string delimStr = ",";
                char[] delimiter = delimStr.ToCharArray();
                string[] split = null;
                split = last.Split(delimiter);
                foreach (string s in split)
                {
                    for (int i = 0; i < n + 1; i++)
                    {
                        if (result != "")
                            result += ",";
                        result += s.Insert(i, n.ToString());

                    }
                }
            }
            return result;
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            e.Result = CalPermutation((int)e.Argument);
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // First, handle the case where an exception was thrown.
            if (e.Error != null)
            {
                MessageBox.Show(e.Error.Message);
            }
            else
            {
                // handle the case where the operation
                // succeeded.
                string delimStr = ",";
                char[] delimiter = delimStr.ToCharArray();
                string[] split = null;
                split = e.Result.ToString().Split(delimiter);
                foreach (string ss in split)
                {
                    listBox1.Items.Add(ss);   

               }
            }
        }

暴力求解-枚举法

/*****0-9全排列输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,n为2到79样例输入:62样例输出:79546/01283=...
  • qq_32792879
  • qq_32792879
  • 2017年03月10日 22:08
  • 161

N!打印1-N的所有排列源代码

================================================求排列数,第二版============================================...
  • Challenge_C_PlusPlus
  • Challenge_C_PlusPlus
  • 2011年06月29日 14:13
  • 1585

基于排列的数列顺序对

题目描述: 洋洋的作业本上有一个长度为n的排列A,这个排列包含了从1到n的n个数,但是因为一些原因,其中一些位置(不超过10个)看不清了,但是洋洋记得这个数列顺序对的数量为k,顺序对是指满足i 输...
  • lsxpu
  • lsxpu
  • 2016年08月02日 22:21
  • 929

网易笔试题(一)

网易笔试题(一)
  • Sophie94
  • Sophie94
  • 2017年02月24日 14:15
  • 573

打印1到n位所有数

输入n,要求打印从1开始到
  • ZHL30041839
  • ZHL30041839
  • 2014年07月20日 08:51
  • 338

POJ1833:排列

Description 题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,...
  • libin56842
  • libin56842
  • 2013年11月30日 22:10
  • 3459

打印输出1-n的所有全排序列

刷题的时候看到这样一个题:打印输出1-9的所有全排序列。后来想了一会,算是理会了,好记性不如烂笔头赶紧写一写加深一点理解。 看到这个问题,我们比较直观的想法就是每交换一次就做一次打印输出,但是要求控制...
  • knisinf
  • knisinf
  • 2015年08月28日 10:03
  • 2422

poj排列

 Description 题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 ...
  • fastkeeper
  • fastkeeper
  • 2014年08月23日 22:18
  • 341

打印从1到n的整数

看到这个题目,最先想到的就是直接一个for循环输出不就完了吗? 这个只是在n不大的情况下,如果n很大那么就不能实现了 关于大数问题最终将转化到字符串上面来,下面是用字符串打印1到n的整数 ...
  • YQlakers
  • YQlakers
  • 2017年06月12日 20:35
  • 202

一个数组,下标从0到n,元素为从0到n的整数。判断其中是否有重复元素

手动调一下,只是判断有无重复的话, 可用一个两重循环搞定:  using System;using System.Collections.Generic;using System.Linq;using...
  • Yujun_Wu
  • Yujun_Wu
  • 2010年04月01日 10:12
  • 1811
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从0到n的排列的一种求法
举报原因:
原因补充:

(最多只允许输入30个字)