首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

数字排列有关问题

2013-12-20 
数字排列问题 。比如一个4个字的号码 , 1234可以组合出 24 个号码 , 2134,3124,4123 ...等等有没有人有写好

数字排列问题 。
比如
一个4个字的号码 , 1234
可以组合出 24 个号码 , 2134,3124,4123 ...等等

有没有人有写好的方法? 

之前自己写的 

  public static ArrayList digitalReorganization(string number)//不一定要是number
        {
            int length = number.Length;
            Array distinct = number.ToArray().Distinct().ToArray();
            string mode = "part1";
            if (length != distinct.Length) mode = "part2"; //2种方法,重复的话可以使用第2种
            ArrayList result = new ArrayList();
            result.Add(number);
            for (int i = 0; i < number.Length - 1; i++)
            {
                if (mode == "part1") result = digitalReorganizationSort(result, i);
                else result = digitalReorganizationSortPart2(result, i);  
            }
            if (mode == "part1") result = new ArrayList(result.ToArray().Distinct().ToArray()); //需要过滤掉重复的
            return result;
        }


  public static ArrayList digitalReorganizationSort(ArrayList numberlist, int index) 
        {
            int loop_count = numberlist.Count; 
            for (var i = 0; i < loop_count; i++)
            {
                ArrayList old = new ArrayList(numberlist[i].ToString().ToArray()); 
                for (var j = 0; j < old.Count - 1 - index; j++)
                {
                    ArrayList temp = new ArrayList(numberlist[i].ToString().ToArray());  //每次copy一个来对调位置
                    string word = old[index].ToString();
                    string next = old[index + j + 1].ToString();
                    temp[index] = next;
                    temp[index + j + 1] = word;
                    string new_number = String.Join("", temp.ToArray());
                    numberlist.Add(new_number);
                }
            }
            return numberlist;
        }



  public static ArrayList digitalReorganizationSortPart2(ArrayList numberlist, int index)
        {
            int loop_count = numberlist.Count; 
            for (var i = 0; i < loop_count; i++)
            {
                ArrayList old = new ArrayList(numberlist[i].ToString().ToArray()); 
                ArrayList distinct_number = new ArrayList(numberlist[i].ToString().Substring(index).ToArray().Distinct().ToArray());

                for (var j = 0; j < distinct_number.Count - 1; j++)


                {
                    string distinct_word = distinct_number[j + 1].ToString();
                    int target = Array.IndexOf(old.ToArray(), distinct_word.ToArray()[0], index);  
                    string word = old[index].ToString();
                    string next = old[target].ToString();
                    ArrayList temp = new ArrayList(numberlist[i].ToString().ToArray());  
                    temp[index] = next;
                    temp[target] = word;
                    string new_number = String.Join("", temp.ToArray());
                    numberlist.Add(new_number);
                }
            }
            return numberlist;
        }


  string number = "1234";
                    
                    ArrayList new_number = stooges.digitalReorganization(number);




[解决办法]
又是一个喜欢无满意结贴的主。一般看到这样的人我是不会给任何回答的。

一般这种人品比较差的人智商也是让人捉急的。一个极其简单的代码能写那么多行,这种人要是让我遇上了,直接让他收拾东西走人。

热点排行