1 回答

TA貢獻1807條經驗 獲得超9個贊
實現此目的的一種方法是每個排列循環一次迭代,并使用循環變量來計算排列所產生的值。考慮到范圍的大小可以用作模參數來“截斷”將成為結果中的值(數字)之一的值(數字)。然后,如果將循環變量(好吧,它的副本)除以范圍大小,則重復上述操作以提取另一個值,...等。
顯然,只有當結果數量不超過類型的容量int或用于循環變量的任何類型的容量時,這才有效。
所以看起來是這樣的:
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;
}
您在問題中給出的示例將通過以下調用生成:
int results[][] = getResults(3, 1, 2);
那么結果是:
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
2 2 2
添加回答
舉報