Joh*_*ohn 12 javascript c# algorithm
可能重复:
有没有更好的方法来排列字符串?
让我们说我有这些信件
A B C D
我希望在一个4个字母长的字符串中得到这些字母的每一个可能的模式/组合.
AAAA
咩咩咩
畜牧业协会
daaa
ABAA
ACAA
ACAD
ABBA
等等.
我可以用什么循环或模式列出每种可能的组合?
我在C#中写这个,但是C++和javascript中的例子也是受欢迎的.
我目前的想法只为每个字母增加一个字母.然后向右移动一次并重复.这不包括像.
ABBA
Eri*_*ert 49
您可以使用LINQ轻松完成:
string[] items = {"a", "b", "c", "d"};
var query = from i1 in items
from i2 in items
from i3 in items
from i4 in items
select i1 + i2 + i3 + i4;
foreach(var result in query)
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)
如果你不知道你想要四个组合,你可以用更多的工作来计算任意笛卡尔积:
http://blogs.msdn.com/b/ericlippert/archive/2010/06/28/computing-a-cartesian-product-with-linq.aspx
这里只有一个for循环
var one = ['a','b','c','d'];
var length = one.length;
var total = Math.pow(length, length);
var pow3 = Math.pow(length,3);
var pow2 = Math.pow(length,2);
for(var i = 0; i<total; i++)
console.log(one[Math.floor(i/pow3)],
one[Math.floor(i/pow2)%length],
one[Math.floor(i/length)%length],
one[i%length]);
Run Code Online (Sandbox Code Playgroud)
这是一个简单的低效方法:
var one = ['a','b','c','d'];
var i,j,k,l;
var len = 4;
for(i=0;i<len;i++) {
for(j=0;j<len;j++) {
for(k = 0; k < len; k++) {
for(l = 0; l<len; l++) {
console.log(one[i], one[j], one[k], one[l]);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
类似的C#:
var one = new[] {'a','b','c','d'};
var len = one.Length;
for(var i=0;i<len;i++) {
for(var j=0;j<len;j++) {
for(var k = 0; k < len; k++) {
for(var l = 0; l<len; l++) {
Console.Write(one[i] + one[j] + one[k] + one[l]);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4844 次 |
最近记录: |