我有一些代码(following this example)从左上角开始遍历矩阵,顺时针旋转。我想使基于关闭的这三个新方法:如何更改此矩阵螺旋遍历的方向和起点?
- 一个从左上角开始并且前往逆时针
- 一个从中间开始,然后顺时针方向进入
- 一个从中间开始,逆时针走
我需要改变每一个这些工作?我尝试了反转计数器增量,并且没有成功地改变开始/结束行/列。
public static void traverseSpiral(int[][] matrix) {
if(matrix.length == 0|| matrix[0].length == 0) {
return;
}
StringBuffer stringBuffer = new StringBuffer();
int counter = matrix.length * matrix[0].length;
int startRow = 0;
int endRow = matrix.length-1;
int startCol = 0;
int endCol = matrix[0].length-1;
boolean moveCol = true;
boolean leftToRight = true;
boolean upDown = true;
while(counter>0) {
if(moveCol) {
if(leftToRight) {
/* printing entire row left to right */
for(int i = startCol; i <= endCol ; i++){
stringBuffer.append(matrix[startRow][i]);
counter--;
}
leftToRight = false;
moveCol = false;
startRow++;
}
else{
/* printing entire row right to left */
for(int i = endCol ; i >= startCol ; i--){
stringBuffer.append(matrix[endRow][i]);
counter--;
}
leftToRight = true;
moveCol = false;
endRow--;
}
}
else
{
if(upDown){
/* printing column up down */
for(int i = startRow ; i <= endRow ; i++){
stringBuffer.append(matrix[i][endCol]);
counter--;
}
upDown = false;
moveCol = true;
endCol--;
}
else
{
/* printing entire col down up */
for(int i = endRow ; i >= startRow ; i--){
stringBuffer.append(matrix[i][startCol]);
counter--;
}
upDown = true;
moveCol = true;
startCol++;
}
}
}
System.out.println(stringBuffer.toString());
}
好像一个要求,解决了功课...... – rlegendi
这不,我向你保证。我正在四处寻找SE实习生面试问题和螺旋遍历的主题,所以我想玩弄它。 –
有没有在这里的答案帮助你?如果是这样,请考虑标记回答的这个问题。 –