题目:
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例:
输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]
输出: [1,2,3,6,9,8,7,4,5]
代码:
public class Test20 {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result =new ArrayList<>();
if(matrix.length==0){
return result;
}
function(matrix,0,matrix.length-1,0,matrix[0].length-1,result);
return result;
}
public void function(int[][] matrix,int rowBegin,int rowEnd,int columnBegin,int columnEnd,List<Integer> result){
if (rowBegin>rowEnd || columnBegin>columnEnd) {
return;
}
if (rowBegin==rowEnd) {
for (int i = columnBegin; i <=columnEnd ; i++) {
result.add(matrix[rowBegin][i]);
}
return;
}
if (columnBegin==columnEnd) {
for (int i = rowBegin; i <=rowEnd ; i++) {
result.add(matrix[i][columnEnd]);
}
return;
}
for (int i = columnBegin; i <=columnEnd ; i++) {
result.add(matrix[rowBegin][i]);
}
for (int i = rowBegin+1; i <=rowEnd ; i++) {
result.add(matrix[i][columnEnd]);
}
for (int i = columnEnd-1; i >=columnBegin ; i--) {
result.add(matrix[rowEnd][i]);
}
for (int i = rowEnd-1; i >=rowBegin+1 ; i--) {
result.add(matrix[i][columnBegin]);
}
function(matrix,rowBegin+1,rowEnd-1,columnBegin+1,columnEnd-1,result);
}
}