需求是这样的,一个2维数组,内容如下:
x = {{a,b,c},{1,2,3},{x,y,z}};类似这样的内容;
想要计算排列形成下面的数据:
a 1 x
a 1 y
a 1 z
a 2 x
a 2 y
a 2 z
a 3 x
a 3 y
a 3 z
b 1 x
b 1 y
b 1 z
b 2 x
b 2 y
b 2 z
b 3 x
b 3 y
b 3 z
c 1 x
c 1 y
c 1 z
c 2 x
c 2 y
c 2 z
c 3 x
c 3 y
c 3 z 形成这样的列表输出。找到了一个java版本的算法。没看懂,大家帮忙看看。再下列是比较灵活的代码,动态的:
String[][] str = {{"a1", "a2", "a3", "a4"},
{"b1", "b2", "b3"},
{"c1", "c2"},
{"d1", "d2", "d3"}}; //这个str可以换成动态的二维数组,或者list[]
int max = 1;
for(int i = 0; i < str.length; i++){
max *= str[i].length;
}
for(int i = 0; i < max; i++){
String s = "";
int temp = 1; //注意这个temp的用法。
for(int j = 0; j < str.length; j++){
temp *= str[j].length;
s += str[j][i / (max / temp) % str[j].length];
}
System.out.println("第 " + (i + 1) + " 个: " + s);
} System.out.println(max);
x = {{a,b,c},{1,2,3},{x,y,z}};类似这样的内容;
想要计算排列形成下面的数据:
a 1 x
a 1 y
a 1 z
a 2 x
a 2 y
a 2 z
a 3 x
a 3 y
a 3 z
b 1 x
b 1 y
b 1 z
b 2 x
b 2 y
b 2 z
b 3 x
b 3 y
b 3 z
c 1 x
c 1 y
c 1 z
c 2 x
c 2 y
c 2 z
c 3 x
c 3 y
c 3 z 形成这样的列表输出。找到了一个java版本的算法。没看懂,大家帮忙看看。再下列是比较灵活的代码,动态的:
String[][] str = {{"a1", "a2", "a3", "a4"},
{"b1", "b2", "b3"},
{"c1", "c2"},
{"d1", "d2", "d3"}}; //这个str可以换成动态的二维数组,或者list[]
int max = 1;
for(int i = 0; i < str.length; i++){
max *= str[i].length;
}
for(int i = 0; i < max; i++){
String s = "";
int temp = 1; //注意这个temp的用法。
for(int j = 0; j < str.length; j++){
temp *= str[j].length;
s += str[j][i / (max / temp) % str[j].length];
}
System.out.println("第 " + (i + 1) + " 个: " + s);
} System.out.println(max);
解决方案 »
- mysql与extjs如何交互的?
- 鼠标的onmouseover和ommouseout
- struts+jquery报错$("#remotetabs").tabs is not a function什么情况啊?
- 网站首页总被恶意加的以下js代码是什么意思?
- 网页的上传的免费空间在哪能够申请呀
- 只打开一个购物车页面,如何把东西添加到同一个购物车里,不要重复打开购物车页面(内含frame)
- 各位帮助我看一下,这是什么问题,为什么,我的信箱登不过去。
- Javascropt的文件操作的方法是什么?
- 请问如何在asp语句中引用javascript
- 怎么找出JS里面的广告代码 删除。找不到。
- 表达式赋值变量为何不能得到一个常量?在线等
- IE8 下图片滑动出现抖动、移动缓慢情况 有何解决方法?
这样才对吧,不要把java里的写法放到js里不知道这是不是你要的结果
var x = [["b",2,"d"],["a",1,"c"],["a",2,"3"],["b",1,"c"]],temp;
x.sort(function(a,b){
temp=a[0].localeCompare(b[0]);
if(temp==0){
temp=a[1]-b[1];
if(temp==0)
temp=a[2].localeCompare(b[2])
}
return temp;
});for(var i=0;i<x.length;i++)
document.write(x[i]+"<br/>");
看明白的朋友帮忙给解释一下呗。
你这个是排序的算法。我的问题是进行排列组合。把2维数组中的每一个里面取出来一个。形成不重复的配列数据。利用那个java的就能实现。不过没太看懂是如何算的。
var count = x.length;
var indexs = [];
var msg = "";
for (var i = 0; i < count; i++) indexs.push(0);
var temp = [];
for (var i = 0; i < count; i++) temp.push(x[i][indexs[i]]);do {
msg += temp.join(" ") + "\n";
tryBreak = false;
for (var i = count - 1; i >= 0; i--) {
if (indexs[i] + 1 < x[i].length) {
indexs[i]++;
temp[i] = x[i][indexs[i]];
for (j = i + 1; j < count; j++) {
indexs[j] = 0;
temp[j] = x[j][indexs[j]];
}
tryBreak = true;
break;
}
}
} while (tryBreak);
alert(msg);
var max = 1;
for (var i = 0; i < str.length; i++) max *= str[i].length; // 很明显这是计算有多少种组合,组合数就是每列个数的乘积
for (var i = 0; i < max; i++) {
var s = "";
var temp = 1;
for (var j = 0; j < str.length; j++) {
temp *= str[j].length; // 每一列的基数
s += str[j][Math.floor(i / (max / temp) % str[j].length)]; // i / (max / temp) 去掉前一列的基数
}
document.write(s + "<br>");
}
Dim x,max,str,str_t,arr
x =Array(Array("a","b","c","d"),Array("1","2","2"),Array("x","y","z"))
max=1
For i=0 To UBound(x)
max=max * (UBound(x(i))+1)
Next
str_t=""
Dim a,b,c
a=0
b=0
c=0
For i=1 to max
str=x(0)(a) & "," & x(1)(b) & "," & x(2)(c)
If InStr(str_t,str)=0 Then
str_t=str_t & str & "|"
End If
c=(c+1) Mod (UBound(x(2))+1)
If c=0 Then
b=(b+1) Mod (UBound(x(1))+1)
If b=0 Then
a=(a+1) Mod (UBound(x(0))+1)
End If
End If
Next
str_t=Left(str_t,Len(str_t)-1)
arr=Split(str_t,"|")
For i=0 To UBound(arr)
response.write arr(i) & "<br />"
Next
%>