我正在寻找一个智能算法,以获得(更多更少)与下面方法相同的结果。
实际上,返回哪个号码并不重要。重要的是,低/高的每个组合都有一个唯一的返回值,返回值在1到36之间。
idx在0到8之间(9个值),从不低于,从不高于。
有什么想法吗?
// idx1 is never = idx2
private long getIdentifier(int idx1, int idx2) {
int low = (idx1>idx2)?idx2:idx1;
int high = ((idx1>idx2)?idx1:idx2);
switch (low) {
case 0:
return high;
case 1:
switch (high) {
case 2:
return 9;
case 3:
return 10;
case 4:
return 11;
case 5:
return 12;
case 6:
return 13;
case 7:
return 14;
case 8:
return 15;
}
case 2:
switch (high) {
case 3:
return 16;
case 4:
return 17;
case 5:
return 18;
case 6:
return 19;
case 7:
return 20;
case 8:
return 21;
}
case 3:
switch (high) {
case 4:
return 22;
case 5:
return 23;
case 6:
return 24;
case 7:
return 25;
case 8:
return 26;
}
case 4:
switch (high) {
case 5:
return 27;
case 6:
return 28;
case 7:
return 29;
case 8:
return 30;
}
case 5:
switch (high) {
case 6:
return 31;
case 7:
return 32;
case 8:
return 33;
}
case 6:
switch (high) {
case 7:
return 34;
case 8:
return 35;
}
case 7:
return 36;
}
return 0;
}
最佳答案
不需要switch语句。
private long getIdentifier(int idx1, int idx2) {
int low = idx1>idx2 ? idx2 : idx1;
int high = idx1>idx2 ? idx1 : idx2;
return (15-low)*low/2+high;
}
这将返回原始方法返回的内容。