首页 新闻 搜索 专区 学院

头晕,求组合算法!!!

-1
悬赏园豆:30 [待解决问题]

工作太累了,脑子动不起来了,来求救。。。

 byte[] str = { 17, 16, 15, 15, 15, 14,14,14, 13,13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3};

请把 这个做组合。。。。

不能重复
例如 
3
4
5 4 3
15 15 15 14 

不能重复
每个组合保存在 new byte[]里面。。。注意顺序,大数要排前面 ,也就是 byte[0] 里面是最大的。。。

求代码!!!
谢谢!!!!

 

帮我改改这个也行,这个有重复,注意性能问题。。。。。
 
     byte[] str = { 17, 16, 15, 15, 15, 14,14,14, 13,13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3};

      for (int i = 1; i <= str.Length; i++)
        {
                Combine(str, i);
       }      
 
       private void Combine(byte[] seeds, int count)
        {
            if (count > seeds.Length || count < 1) throw new ArgumentOutOfRangeException("count");

            int len = seeds.Length;
            int[] indexes = new int[count];
            byte[] result = new byte[count];
            result[0] = seeds[0];
            int pos = 0;

            while (true)
            {
                if (pos < count - 1)
                {
                    indexes[pos + 1] = indexes[pos] + 1;
                    pos++;
                    result[pos] = seeds[indexes[pos]];
                }
                else
                {
                    //result 

                      byte[] dstArray = new byte[result.Length];
                      Buffer.BlockCopy(result, 0, dstArray, 0, result.Length);//这里保存

                    if (indexes[pos] < len - 1)
                    {
                        indexes[pos]++;
                        result[pos] = seeds[indexes[pos]];
                    }
                    else
                    {
                        bool isEnd = true;
                        for (int i = count - 2; i >= 0; i--)
                        {
                            if (indexes[i] < len - count + i)
                            {
                                pos = i;
                                indexes[pos]++;
                                result[pos] = seeds[indexes[pos]];
                                isEnd = false;
                                break;
                            }
                        }
                        if (isEnd) break;
                    }
                }
            }

        }

☆绿茶☆的主页 ☆绿茶☆ | 初学一级 | 园豆:76
提问于:2017-01-20 18:31
< >
分享
所有回答(5)
0

你的意思是,把这个数组重新降序排序,去掉重复的值?

龙行天涯 | 园豆:1840 (小虾三级) | 2017-01-21 09:30

不是,是求组合,不要重复,再算法里面计算那些是重复的,就不添加了。主要是性能问题。。。

支持(0) 反对(0) ☆绿茶☆ | 园豆:76 (初学一级) | 2017-01-21 11:28

@☆绿茶☆: 不明白你真正目的是什么

支持(0) 反对(0) 龙行天涯 | 园豆:1840 (小虾三级) | 2017-01-21 11:34
0

楼主把头绪理清楚一点

LangDeYeXing | 园豆:206 (菜鸟二级) | 2017-01-21 19:55
0

 你把我都搞晕了

欠你一文钱 | 园豆:202 (菜鸟二级) | 2017-01-22 10:25
0

i  can,are 你需要吗

元点之始 | 园豆:6 (初学一级) | 2017-01-22 11:16

要!哈哈

支持(0) 反对(0) ☆绿茶☆ | 园豆:76 (初学一级) | 2017-01-22 12:36
0

http://www.cnblogs.com/shiyuxinglan/archive/2010/04/27/1721880.html

Постой! | 园豆:829 (小虾三级) | 2017-01-22 11:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册