工作太累了,脑子动不起来了,来求救。。。
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;
}
}
}
}
你的意思是,把这个数组重新降序排序,去掉重复的值?
不是,是求组合,不要重复,再算法里面计算那些是重复的,就不添加了。主要是性能问题。。。
@☆绿茶☆: 不明白你真正目的是什么
楼主把头绪理清楚一点
你把我都搞晕了
i can,are 你需要吗
要!哈哈
http://www.cnblogs.com/shiyuxinglan/archive/2010/04/27/1721880.html