1 回答

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
實(shí)現(xiàn)此目的的一種方法是每個(gè)排列循環(huán)一次迭代,并使用循環(huán)變量來(lái)計(jì)算排列所產(chǎn)生的值。考慮到范圍的大小可以用作模參數(shù)來(lái)“截?cái)唷睂⒊蔀榻Y(jié)果中的值(數(shù)字)之一的值(數(shù)字)。然后,如果將循環(huán)變量(好吧,它的副本)除以范圍大小,則重復(fù)上述操作以提取另一個(gè)值,...等。
顯然,只有當(dāng)結(jié)果數(shù)量不超過(guò)類型的容量int或用于循環(huán)變量的任何類型的容量時(shí),這才有效。
所以看起來(lái)是這樣的:
int [][] getResults(int numPositions, int low, int high) {
int numValues = high - low + 1;
int numResults = (int) Math.pow(numValues, numPositions);
int results[][] = new int [numResults][numPositions];
for (int i = 0; i < numResults; i++) {
int result[] = results[i];
int n = i;
for (int j = numPositions-1; j >= 0; j--) {
result[j] = low + n % numValues;
n /= numValues;
}
}
return results;
}
您在問(wèn)題中給出的示例將通過(guò)以下調(diào)用生成:
int results[][] = getResults(3, 1, 2);
那么結(jié)果是:
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
2 2 2
添加回答
舉報(bào)