這是一個有趣的問題要解決。
這很容易在嵌套循環得到糾結了。
我注意到如果我把這些單詞放在一個字符串中,就會出現一個模式。
以OP的例子爲例,「SUGAR」,「GLASS」,「MOUSE」這三個單詞連接在一起成爲SUGARGLASSMOUSE。
這裏是我需要從串聯字符串中獲得的字符的基於零的字符位置。我把它們排列起來,這樣你就可以更容易地看到圖案。
10 M
5 11 GO
0 6 12 SLU
1 7 13 UAS
2 8 14 GSE
3 9 AS
4 R
看到模式了嗎?我有3個由5次迭代組成的索引。我有3個字由5個字母組成。
對角字的數量是letters + words - 1
。我們減1,因爲字符位置0中的第一個字母只用了一次。
這是我跑過的測試的結果。
[ "SUGAR" "GLASS" "MOUSE" "STATE" "PUPIL" "TESTS" ]
[ "T" "PE" "SUS" "MTPT" "GOAIS" "SLUTL" "UASE" "GSE" "AS" "R" ]
[ "SUGAR" "GLASS" "MOUSE" ]
[ "M" "GO" "SLU" "UAS" "GSE" "AS" "R" ]
而這裏的代碼:
import java.util.ArrayList;
import java.util.List;
public class Matrix {
public static final int DOWN_RIGHT = 1;
public static final int DOWN_LEFT = 2;
public static final int UP_RIGHT = 4;
public static final int UP_LEFT = 8;
public String[] getMatrixDiagonal(String[] grid, int direction) {
StringBuilder builder = new StringBuilder();
for (String s : grid) {
builder.append(s);
}
String matrixString = builder.toString();
int wordLength = grid[0].length();
int numberOfWords = grid.length;
List<String> list = new ArrayList<String>();
if (wordLength > 0) {
int[] indexes = new int[numberOfWords];
if (direction == DOWN_RIGHT) {
indexes[0] = matrixString.length() - wordLength;
for (int i = 1; i < numberOfWords; i++) {
indexes[i] = indexes[i - 1] - wordLength;
}
int wordCount = numberOfWords + wordLength - 1;
for (int i = 0; i < wordCount; i++) {
builder.delete(0, builder.length());
for (int j = 0; (j <= i) && (j < numberOfWords); j++) {
if (indexes[j] < wordLength * (wordCount - i)) {
char c = matrixString.charAt(indexes[j]);
builder.append(c);
indexes[j]++;
}
}
String s = builder.reverse().toString();
list.add(s);
}
}
if (direction == DOWN_LEFT) {
// Exercise for original poster
}
if (direction == UP_RIGHT) {
// Exercise for original poster
}
if (direction == UP_LEFT) {
// Exercise for original poster
// Same as DOWN_RIGHT with the reverse() removed
}
}
return list.toArray(new String[list.size()]);
}
public static void main(String[] args) {
String[] grid1 = { "SUGAR", "GLASS", "MOUSE", "STATE", "PUPIL", "TESTS" };
String[] grid2 = { "SUGAR", "GLASS", "MOUSE" };
Matrix matrix = new Matrix();
String[] output = matrix.getMatrixDiagonal(grid1, DOWN_RIGHT);
System.out.println(createStringLine(grid1));
System.out.println(createStringLine(output));
output = matrix.getMatrixDiagonal(grid2, DOWN_RIGHT);
System.out.println(createStringLine(grid2));
System.out.println(createStringLine(output));
}
private static String createStringLine(String[] values) {
StringBuilder builder = new StringBuilder();
builder.append("[ ");
for (String s : values) {
builder.append("\"");
builder.append(s);
builder.append("\" ");
}
builder.append("]");
return builder.toString();
}
}
@bhavik我曾嘗試使用各種for循環來做到這一點,但這麼長時間,我還沒有找到一種方法來使它工作。這是我編寫的一個更大的程序的一部分,我已經成功地從矩陣中檢索了其他數據。這是最後一部分,我無法弄清楚應用的模式。 –
然後寫下你已經試過的代碼,以便可以改進該代碼 –