您的位置:首页 > 其它

leetcode 54. Spiral Matrix

2016-10-25 14:36 477 查看
//Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
//
//For example,
//Given the following matrix:
//
//[
// [ 1, 2, 3 ],
// [ 4, 5, 6 ],
// [ 7, 8, 9 ]
//]
//You should return [1,2,3,6,9,8,7,4,5].

import java.util.ArrayList;
import java.util.List;

public class test{

public static List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result = new ArrayList<Integer>();
if(matrix == null || matrix.length == 0){					//如果输入为空,则直接返回空结果
return result;
}
int maxRow = matrix.length-1;								//最大行数减1
int maxCol = matrix[0].length-1;							//最大列数减1
int minRow = 0;												//最小行数
int minCol = 0;												//最小列数
while(true){												//一直循环
for(int col = minCol;col<=maxCol;col++){				//从最小行开始遍历,行不变,列变
result.add(matrix[minRow][col]);
}
minRow++;												//最小行加1
if(minRow>maxRow){										//如果最小行大于最大行,则跳出循环
break;
}
for(int row = minRow;row<=maxRow;row++){				//从最大列列开始,行变,列不变
result.add(matrix[row][maxCol]);
}
maxCol--;												//最大列减1
if(minCol>maxCol){										//如果最小列大于最大列,则跳出循环
break;
}
for(int col = maxCol;col>=minCol;col--){				//从最大行开始,行不变,列变
result.add(matrix[maxRow][col]);
}
maxRow--;												//最大行减1
if(minRow>maxRow){										//如果最小行大于最大行,则跳出循环
break;
}
for(int row = maxRow;row>=minRow;row--){				//从最小列开始,行变,列不变
result.add(matrix[row][minCol]);
}
minCol++;												//最小列加1
if(minCol>maxCol){										//如果最小列大于最大列,则跳出循环
break;
}
}
return result;
}

public static void main(String[] args){
int[][] nums = {
{1,2,3},
{4,5,6},
{7,8,9}
};
List<Integer> result = spiralOrder(nums);
System.out.println(result);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: