【LeetCode 0-Start】[数组]特定顺序遍历二维数组
特定顺序遍历二维数组 题目序号: 54、59、498
题目来源 算法思想:二维矩阵
思路:螺旋,一层层读取数据;
注意:在本题中,因为不是方阵,是m*n,即m有可能不等于n;所以要时刻判断元素个数,是否读取完成,避免读取多了,即每个for循环中要判断N>0
主要思路与下面相似,要特别注意以上条件;
分析来源.
class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> res = new ArrayList<Integer>(); if (matrix.length == 0) {//如果为空,直接返回 return res; } int r = matrix[0].length-1;//右边界 int l = 0;//左边界 int t = 0;//上边界 int b = matrix.length-1;//下边界 int n = matrix[0].length*matrix.length;//元素总数量,用来判断是否还要继续读取 while (n > 0) {//未读满时,继续读取 for (int i = l; n > 0 && i <= r; i++) {//从左往右 res.add(matrix[t][i]); n--; } t++;//缩小上边界 for (int i = t; n > 0 && i <= b; i++) {//从上往下 res.add(matrix[i][r]); n--; } r--;//缩小右边界 for (int i = r; n > 0 && i >= l; i--) {//从左往右 res.add(matrix[b][i]); n--; } b--;//缩小下边界 for (int i = b; n > 0 && i >= t; i--) {//从下往上 res.add(matrix[i][l]); n--; } l++;//缩小左边界 } return res;//返回 } }题目来源 算法思想:二维数组;
思路:螺旋,一层层生成数据; 分析来源.
class Solution { public int[][] generateMatrix(int n) { if (n == 0) { return null; } int[][] res = new int[n][n]; int r = n-1;//右边界 int l = 0;//左边界 int t = 0;//上边界 int b = n-1;//下边界 int num = 1;//填入的数字 n = n*n;//元素总数量,用来判断是否还要继续 while (n > 0) { for (int i = l; i <= r; i++) {//从左往右 res[t][i] = num; num++; n--; } t++;//缩小上边界 for (int i = t; i <= b; i++) {//从上往下 res[i][r] = num; num++; n--; } r--;//缩小右边界 for (int i = r; i >= l; i--) {//从左往右 res[b][i] = num; num++; n--; } b--;//缩小下边界 for (int i = b; i >= t; i--) {//从下往上 res[i][l] = num; num++; n--; } l++;//缩小左边界 } return res; } }题目来源 算法思想:二维数组;